用UDP发生数据包,碰到一个奇怪的问题~

_____non______ 2005-09-17 12:43:22
DWORD WINAPI ThreadProc(LPVOID lpParam)
{
sockdata.sockid = socket(AF_INET,SOCK_DGRAM,0);

hostent *hostname;
hostname = gethostbyname(sockinfo.hostname);
sockdata.addr.sin_addr.S_un.S_addr = *(DWORD*)hostname->h_addr_list[0];
//CopyMemory(&sockdata.addr.sin_addr.S_un.S_addr,hostname->h_addr_list[0],sizeof(sockdata.addr.sin_addr.S_un.S_addr));
sockdata.addr.sin_family = AF_INET;
sockdata.addr.sin_port = htons(sockinfo.port);

sendto(sockdata.sockid,"OK",strlen("OK")+1,0,(sockaddr*)&sockdata.addr,sockdata.len);

while(TRUE)
{
if (SOCKET_ERROR == recvfrom(sockdata.sockid,sockdata.recvbuf,100,0,(sockaddr*)&sockdata.addr,&sockdata.len))
{
int ret = WSAGetLastError();
char tempbuf[100];
wsprintf(tempbuf,"%d\r\n%s\r\n%d\r\n",ret,sockinfo.hostname,sockinfo.port);
MessageBox(NULL,tempbuf,"连接退出~",0);

break;
}
.......................

}

return FALSE;
}

上面是大概的代码,线程函数中没有声明的变量都是全局变量~~

情况很奇怪,程序第一次启动,在client端可以收到信息,但是第二次就收不到了~~
我捕获了一下recvfrom的错误代码,代码为10022——提供了一个无效的参数。

但是三次又可以了~~

从来没有遇见过这样的问题~~

我怀疑sockdata.addr这个变量有问题~~~
但是为什么第一次可以发送成功~

client端没有问题,我另外写了简单的server端,测试没有问题~
...全文
145 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
_____non______ 2005-09-19
问题已经解决了~~~

是插入的进程本身有问题~
回复
nuaawenlin 2005-09-18
每次都需要进行初始化
回复
_____non______ 2005-09-17
那一句我是在外面初始化的~~

写的是

sockdata.len = sizeof(sockaddr);

应该没有问题吧,都是16字节嘛~
回复
_____non______ 2005-09-17
已经做了初始化
回复
nuaawenlin 2005-09-17
sockdata.len = sizeof(sockdata.addr);
if (SOCKET_ERROR == recvfrom(sockdata.sockid,sockdata.recvbuf,100,0,(sockaddr*)&sockdata.addr,&sockdata.len))
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-09-17 12:43
社区公告
暂无公告