急!急!急!基于WINCE的SOCKET报10054
最近开发一个基于WINCE的和另外一个设备进行SOCKET通信的东东。遇到一个问题!
现在在家,没法传源码,问题是这样的。我开了个单线程对设备进行数据采集。自己写的是客户端。服务端无法修改。
先试同步方式连接,同步方式获取数据。正常运行2-3分钟,receive(recvBuf)时报SOCKET.SOCKETEXCEPTION,报异常连接被强行关闭,我new了一个socket重新连接,在连接的地方卡住,连接不上。过一阵就出了连接被关闭,
第二回我采用异步的方式连接,同步方式获取数据。正常运行2-3分钟后报SOCKET.SOCKETEXCEPTION 10054,现有连接被关闭。重新new了个socket进行连接。在BeginReceive处用connectDone做超时判断,再次连接的时候这里老是报超时,无法连接。
于是乎改异步连接,异步获取数据。还是连接不上。在连接的时候老超时,错误同上。
然后我将连接改为同步,异步获取数据。这个时候重新new的SOCKET能连接了。不过一到数据获取的时候又报异常,在client.EndReceive(rs)时报出连接被强行关闭,
异步获取数据时候,我用的是receiveDon.WaitOne(3000,false)做超时判断。在网上查了下资料,貌似SetSocketOption ReceiveTimeOut不支持。
错误代码全是10054。
以上代码全未设SetSocketOption,试过DontLinger,好像用处不大,错误依旧,于是放弃了。至于keep-alive好像是需要在服务端上设置,心跳包好像也不成,发上去,设备无响应。
很无语了。有高手看到给点建议吧。
另外,想了些其它招,比如中止线程,重开新线程连接。只要一报10054,就没办法再次连接了,关闭程序再打开,又能正常连接2-3分钟。试了一天,没啥结果,只能来求助了。