recvfrom 函数死机

orangeo 2011-12-08 10:08:02
当对方未发数据,而调用if(recvfrom( socket,buffer,sizeof(buffer),0, (struct sockaddr* )&from,&from)!=SOCKERT_ERROR)时,程序就死在那不动了,鼠标拖都拖不动了,直到对方发数据过来。请教各位大侠,有何方法不让它死在那。
...全文
254 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
我不懂电脑 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设置的是阻塞模式吧,设置成非阻塞模式
回复
相关推荐
发帖
网络及通讯开发
创建于2007-08-02

1299

社区成员

C++ Builder 网络及通讯开发
申请成为版主
帖子事件
创建了帖子
2011-12-08 10:08
社区公告
暂无公告