求助:使用UdpClient.Receive方法接收对方回复时,如若对方没有答复,怎么解决Receive方法死等的问题? |
MSDN:Receive方法将阻塞,直到数据报从远程主机到达为止。 可如若远程主机无数据报返回,或者数据报丢失,那岂不是Receive方法将永远等下去了么?如何解决此问题,或设置超时时间?盼答,非常感谢
如若推荐一些供相关的文章也不胜感激,如果用代码说明希望能用文字说明下核心的思想
解决后立即结贴
|
|
回复内容 |
【lingbo_wx】: 控制接受次数和一次需要的时间来试试阿
【shield0771】: 抱歉,不大明白楼上的意思,请问是在什么地方设置控制接受次数和一次需要的时间?
【CathySun118】: 一般用设置超时时间的方法
【shield0771】: 请问怎么设置超时时间呢?
【jiatong1981】: MARK
【hertcloud】: socket编程设置socket.Receive()的等待时间: IPEndPoint remohost=new IPEndPoint(IPAddress.Parse("192.168.0.125"),5010); Socket s=new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); s.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.SendTimeout,time_out); s.SetSocketOption(SocketOptionLevel.Socket,SocketOptionName.ReceiveTimeout,time_out);
【shield0771】: 学习
【shield0771】: 请问SetSocketOption里设置ReceiveTimeout能否同样作用在异步的EndReceive上呢?
【shield0771】: 等
【wzd24】: 设置超时间对异步操作无效!不管是发送还是接收!
【shield0771】: 那请问在异步接收的过程中如何处理收不到回复的情况呢? ENDRECEIVE也会一直等下去,没有超时的话岂不是一直占用资源了么?
【wuhuabucai】: 超时时间
【Red_angelX】: 异步就ok了
【Red_angelX】: BeginReceive
【shield0771】: 那请问在异步接收的过程中如何处理收不到回复的情况呢? 在异步开启的新线程中ENDRECEIVE也会一直等下去,没有超时的话岂不是一直占用资源了么?
【wangzh_2002】: 用定时器,定时器时间到如没有接收到数据,就清除接收缓存,并发错误消息。
【Moon1】: 呵呵,我来接分 : )
【shield0771】: 我用异步的BeginReceiveFrom解决了
感谢Moon1(静静的黎明)在 http://community.csdn.net/Expert/topic/5489/5489987.xml?temp=.3631098 中给与的帮助,也因此解决了本帖的问题,因此两贴合作一帖给分
感谢诸位的帮忙
【Red_angelX】: 我对给与我的分数不太满意!
【shield0771】: Red_angelX(八戒) 这个。。。。汗,也许我的给分标准不是很让你满意吧 我的给分是按照对我的疑问提供的帮助来给的,其实你给出回答的时候,我已经在使用异步BeginReceiveFrom了(虽然帖子里没有说明),只是由于对SOCKET理解得不够深刻,代码出了很多问题,所以另开贴提出了疑问,疑问一旦解决本帖也随之解决,因此我如此给分,希望你能理解
【wzd24】: 好像是倒分贴! 版主来处理一下!
|
|
|
|