socket接收超时
想做一个很简单的小程序,客户端连一下服务器,然后获取想要的信息。若服务器故障不回复不能一直阻塞,但是Wince下设置超时好像不能用,编译没问题,执行就报错。代码如下,
Socket DNSClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp); DNSClient.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);
' 我做的 WINCE-SOCKET 超时专用’送你参考,哈哈 Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick '超时专用计时 If TCPClient.LJbutton.Enabled = True Then ljztxs.Text = "未连接" T1TimeOut = 2 'T1进来还有个初始化值,到才执行 jdmlbz = False '没收到数据标志 ModbusWait1 = False Timer2.Enabled = False Exit Sub End If ModbTimeOut = ModbTimeOut + 1 If ModbTimeOut > 2 Then ModbTimeOut = 0 ModbusWait1 = False '停止超时等待 Timer2.Enabled = False ' MessageBox.Show("超时无应答!") ljztxs.Text = "超时" T1TimeOut = 0 'T1进来还有个初始化值,到才执行 jdmlbz = False '没收到数据标志 BeginInvoke(New EventHandler(AddressOf TCPClient.DKbutton_Click)) '用此法点击断开按钮!发空字符会掉线。 End If End Sub
[解决办法]
我们用了,确实不支持超时,用异步的吧,这样超时了自己取消.再重新发送接收.
[解决办法]
设置非阻塞,然后用select
wince socket和桌面系统的api接受的选项有区别,具体的针对你用的api还是查查msdn.