首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

socket接收超时,该如何处理

2012-02-11 
socket接收超时想做一个很简单的小程序,客户端连一下服务器,然后获取想要的信息。若服务器故障不回复不能一

socket接收超时
想做一个很简单的小程序,客户端连一下服务器,然后获取想要的信息。若服务器故障不回复不能一直阻塞,但是Wince下设置超时好像不能用,编译没问题,执行就报错。代码如下,

C# code
 Socket DNSClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream,ProtocolType.Tcp);                DNSClient.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, 5000);

执行到第2句,就报错:在getsockopt或setsockopt调用中制定了未知、无效或不受支持的选项或级别。
  感觉像系统不支持,接触嵌入式不久,哪位知道什么原因、怎么解决,万分感谢!!!

[解决办法]
放到线程里面去执行,超时了kill线程
[解决办法]
超时自己做,用个定时器计算,时间到,则给出超时标志,控制定时器的启动计数
[解决办法]
VB.NET code
    ' 我做的  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.

热点排行