局域网中,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;

}
}
这段代码是线程执行.
...全文
370 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
常识性错误!
晕.

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧