局域网中,UDP传输在断线又恢复后,对方收不到数据了.UDP应该是无连接的呀,怎么会这样呢?附代码.

prettywolf 2005-09-11 09:29:36
UINT WorkThread(LPVOID param)
{
SOCKET s;
sockaddr_in addrto;
WSADATA wsdata;
BOOL bsocket;
char *smsg="this is a test";
//Start SOCKET lib£¬version is 2.0
WSAStartup(0x0202,&wsdata);

s=WSASocket(AF_INET,SOCK_DGRAM,0,NULL,0,WSA_FLAG_OVERLAPPED);
bsocket=TRUE;
addrto.sin_family=AF_INET;
addrto.sin_addr.s_addr=inet_addr("192.168.10.255");//INADDR_BROADCAST;
addrto.sin_port=htons(5050);
bool opt=true;
//set this socket to Broadcast£¬
setsockopt(s,SOL_SOCKET,SO_BROADCAST,(char FAR *)&opt,sizeof(opt));
int nlen=sizeof(addrto);
while(1)
{
Sleep(5000);
//sendto the broadcast address
int ret=sendto(s,smsg,256,0,(sockaddr*)&addrto,nlen);
if(ret==SOCKET_ERROR)
MessageBox(NULL,"Error!","Warming!",MB_OK);//cout<<WSAGetLastError()<<endl;

}
}
这段代码是线程执行.
...全文
228 点赞 收藏 9
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
DentistryDoctor 2005-09-13
?
回复
mynamelj 2005-09-13
是不是网没有插好?
回复
prettywolf 2005-09-13
那个地址是没错的,不过一般不这样写.应该是:INADDR_BROADCAST,我只是测试用.
原因在这里:
if(ret==SOCKET_ERROR) MessageBox(NULL,"Error!","Warming!",MB_OK);
当断线后,ret=SOCKET_ERROR 所以弹出一个消息框,等待按确定.程序到这里不继续执行下去了.
你说晕不晕.
所以说是常识性错误.
回复
flashboy 2005-09-13
失败的地方试验着SLEEP一会后重试几下, 应该可以的。
回复
alen_ghl 2005-09-13
所以说尽量别用模式对话框来进行提示,特别是后台程序,不然阻塞线程而无法继续工作
回复
nuaawenlin 2005-09-12
不明白

既然设置了广播

为何又要指定一个特定的不是广播地址的目的地址?????
回复
oyljerry 2005-09-12
估计楼主解决了,^_^,jf
回复
howtotell 2005-09-11
没有明白楼主的意思。
回复
prettywolf 2005-09-11
常识性错误!
晕.
回复
相关推荐
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

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