recvfrom 函数死机

orangeo 2011-12-08 10:08:02
当对方未发数据,而调用if(recvfrom( socket,buffer,sizeof(buffer),0, (struct sockaddr* )&from,&from)!=SOCKERT_ERROR)时,程序就死在那不动了,鼠标拖都拖不动了,直到对方发数据过来。请教各位大侠,有何方法不让它死在那。
...全文
561 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
我不懂电脑 2011-12-12
  • 打赏
  • 举报
回复
可以用多线程避免阻塞
cgl_lgs 2011-12-08
  • 打赏
  • 举报
回复
非阻塞网络程序与阻塞一点儿也不一样,如果楼主真想做,那还是先看看书再说吧,这东西Unix网络编程是用好几章讲的,我自认为我没那个本事能精练成一个帖子说清楚:)

如果改用多线程,那就把这些非界面的东西单独写出去,然后写一个类继承TThread并实现Run:)最后实例化这个类就行了:)
orangeo 2011-12-08
  • 打赏
  • 举报
回复
int iMode = 1; //0:阻塞
ioctlsocket(socketc,FIONBIO, (u_long FAR*) &iMode);//非阻塞设置

加了这两句后,程序是不死了,可也不发送读取数据了。我的用是BCB6,,windows XP
程序要怎么大变样呢,单线程又该怎么做呢?
cgl_lgs 2011-12-08
  • 打赏
  • 举报
回复
非阻塞需要让程序做大变样,而不是简单地设置完事儿,否则程序会乱的:)
zzbinfo 2011-12-08
  • 打赏
  • 举报
回复
由于我不知道你的编译环境和系统环境,你可以尝试用google来解决
orangeo 2011-12-08
  • 打赏
  • 举报
回复
怎么设置成 非阻塞?
cgl_lgs 2011-12-08
  • 打赏
  • 举报
回复
如果机器性能还行,理论上来说不应该死掉,当然窗体肯定是没反应了。要想有反应就单开线程做收发。
如果想改动更大些,那也可以改用非阻塞:)
zzbinfo 2011-12-08
  • 打赏
  • 举报
回复
你的socket设置的是阻塞模式吧,设置成非阻塞模式

1,317

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 网络及通讯开发
社区管理员
  • 网络及通讯开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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