急!急!急!基于WINCE的SOCKET报10054

wzqwww 2013-06-08 12:05:22
最近开发一个基于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分钟。试了一天,没啥结果,只能来求助了。
...全文
212 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
wzqwww 2013-06-10
事实证明,不能怀疑人家德国品牌的质量,有了问题还是得找找自身原因啊!哈哈,还是得谢谢各位捧场了。
回复
wzqwww 2013-06-10
最终解决了。问题出在异步发送上,发送时间超时了。改成同步后问题解决。不过还是想再了解清楚下。一旦抛出了10054错误后,怎么再通过异步去连接或发送,老会超时哩?这是BUG还是程序上有问题?知道的的说说看
回复
nikolay 2013-06-09
服务端端口没有打开,或者端口错误。 10054 错误:你所请求的链接被拒绝。
回复
ishengxun 2013-06-09
服务端设备有问题吧?重启下呢
回复
wzqwww 2013-06-08
没人关注啊,来个人看看,给点建议也好啊
回复
wzqwww 2013-06-08
主要是服务端我动不了,里面是个啥情况咱也不太清楚。好难处理哟!
回复
wzqwww 2013-06-08
我不确定啊。服务是个设备,人家德国出品,拿来卖钱的,我想应该没啥问题吧。UMG507,只是貌似他给的示例是JAVA的,我把他转成C#了。在我PC机上测试能正常,谁知道一拿到WINCE上就出这毛病。为这我忙了一天,10点才下班儿。
回复
你确定服务端没问题?
回复
wzqwww 2013-06-08
论坛混得少,一共就10多分,解答上的,我全送了。
回复
相关推荐
发帖
C#
创建于2007-09-28

10.5w+

社区成员

.NET技术 C#
申请成为版主
帖子事件
创建了帖子
2013-06-08 12:05
社区公告

让您成为最强悍的C#开发者