udp接收端错误 我做了一个udp协议的发送端,一个接收端,但是不能通讯,我跟踪的结果是发送端正常,接收端出现10014错误,请问10014是个什么错误啊,如何解决啊?如果分数不够我还可以再加100分 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 sckInvalidArgument 10014 所请求的地址是广播地址,但未设置标记 mct10255:出现这个错误的原因是什么? 10014 bad address,是那个地址错了呢?本地的监听地址,还是预备接收发送端地址的SOCKADDR_IN sender 错了呢? WSAEFAULT (10014) Bad address. 系统检测到调用试图使用的一个指针参数指向的是一个非法指针地址。如果应用程序传递一个非法的指针值,或缓冲区长度太小,此错误发生。例如,参数为结构sockaddr,但参数的长度小于sizeof(struct sockaddr)。 SOCKADDR_IN sender;int dwSenderSize;ret = recvfrom(s, recvbuf,dwLength, 0, (SOCKADDR *)&sender, &dwSenderSize);其中sender,dwSenderSize没有初始化,他们的作用是传递一个地址,recvfrom函数负责写这两个变量。他们不会非法吧? 加一句dwSenderSize=sizeof(SOCKADDR_IN);试试 mct1025:我把代码贴出来你帮忙查一查好么?接收端void CTestreceiveDlg::OnButtonReceive() { WSADATA wsd; SOCKET s; char * recvbuf =NULL; int ret; int dwSenderSize; SOCKADDR_IN sender; SOCKADDR_IN local; dwSenderSize=sizeof(SOCKADDR_IN); WSAStartup(MAKEWORD(2, 2),&wsd); s = socket(AF_INET, SOCK_DGRAM, 0); local.sin_family = AF_INET; local.sin_port = htons(5550); local.sin_addr.s_addr = inet_addr("211.155.14.176"); bind(s,(SOCKADDR *)&local, sizeof(local)); while (1) { ret = recvfrom(s, recvbuf, 64, 0, (SOCKADDR *)&sender, &dwSenderSize); } }发送端void CTestsendDlg::OnButtonSend() { WSADATA wsd; SOCKET s; char* sendbuf = NULL; int ret; SOCKADDR_IN local; char cChar = 'a'; WSAStartup(MAKEWORD(2, 2), &wsd); s = socket(AF_INET, SOCK_DGRAM, 0); local.sin_family = AF_INET; local.sin_port = htons(5550); local.sin_addr.s_addr = inet_addr("211.155.14.178"); sendbuf="dddddddddddddddddddddddd"; while (1) ret = sendto(s, sendbuf, 64, 0, (SOCKADDR *)&local, sizeof(local)); closesocket(s); WSACleanup();} server端,你定义 char * recvbuf =NULL;后没有赋值加入recvbuf = new char[100];最后delete []recvbuf; mct1025(macuntao):哥们谢谢你了,现在可以了。我看的例子是windows网络编程上的,我以为这就是权威,可能是我看的有问题。呵呵谢谢。交个朋友oicq 1647463。 VC6.0 Unicode文本文件读出写入 使用CreateWindow创建的Button如何才能设置字体? 怎样判断IP报是分片! 各位高手近来瞧瞧 如何修改DC的坐标原点? 大家帮忙看看,我这段程序的错误好怪! WM_NOTIFY到底是什么消息 请解释一下什么情况下发生? 何谓中断? 有这本书的中文版吗?《Win32 Programming》 zboat(海水) 你在哪里?---〉CTabCtrl控件与属性页的区别与联系?CTabCtrl控件的使用方法?(分数只能这么多,如果可以的话,会在加) VC编译中出现的问题,和Unicode有关 谁有关于线程的资料???(最好时C语言的)
出现这个错误的原因是什么?
是那个地址错了呢?
本地的监听地址,还是预备接收发送端地址的SOCKADDR_IN sender 错了呢?
int dwSenderSize;ret = recvfrom(s, recvbuf,dwLength, 0, (SOCKADDR *)&sender, &dwSenderSize);
其中sender,dwSenderSize没有初始化,他们的作用是传递一个地址,recvfrom函数负责写这两个变量。他们不会非法吧?
dwSenderSize=sizeof(SOCKADDR_IN);
试试
我把代码贴出来你帮忙查一查好么?
接收端
void CTestreceiveDlg::OnButtonReceive()
{
WSADATA wsd;
SOCKET s;
char * recvbuf =NULL;
int ret;
int dwSenderSize;
SOCKADDR_IN sender;
SOCKADDR_IN local; dwSenderSize=sizeof(SOCKADDR_IN); WSAStartup(MAKEWORD(2, 2),&wsd);
s = socket(AF_INET, SOCK_DGRAM, 0); local.sin_family = AF_INET;
local.sin_port = htons(5550);
local.sin_addr.s_addr = inet_addr("211.155.14.176"); bind(s,(SOCKADDR *)&local, sizeof(local)); while (1)
{
ret = recvfrom(s, recvbuf, 64, 0, (SOCKADDR *)&sender, &dwSenderSize);
}
}发送端
void CTestsendDlg::OnButtonSend()
{
WSADATA wsd;
SOCKET s;
char* sendbuf = NULL;
int ret;
SOCKADDR_IN local;
char cChar = 'a';
WSAStartup(MAKEWORD(2, 2), &wsd);
s = socket(AF_INET, SOCK_DGRAM, 0);
local.sin_family = AF_INET;
local.sin_port = htons(5550);
local.sin_addr.s_addr = inet_addr("211.155.14.178"); sendbuf="dddddddddddddddddddddddd";
while (1)
ret = sendto(s, sendbuf, 64, 0, (SOCKADDR *)&local, sizeof(local)); closesocket(s);
WSACleanup();}
没有赋值
加入recvbuf = new char[100];最后delete []recvbuf;
哥们谢谢你了,现在可以了。
我看的例子是windows网络编程上的,我以为这就是权威,可能是我看的有问题。呵呵谢谢。
交个朋友oicq 1647463。