急!急!急~~~ 由于目标机器积极拒绝,无法连接
本人调试一本c#写的Socket服务端时,如果一台客户端写一个与服务端连接发送数据,再断开连接的循环,运行客户端执行循环,再CTL+C关闭客户端,如此循环手动操作,有概率出现,客户端再连接不上服务端,返回操作异常:”由于目标机器积极拒绝,无法连接。“
请哪位遇到过类似情况的大侠指点一下迷津,万分感谢~~~
------最佳解决方案--------------------你在客户端的接收和传输功能应该是做在线程上面吧,估计你线程中的有些资源没有释放,你断开的时候释放下当前接收传输线程,估计就没有这种问题了
------其他解决方案--------------------为啥要断开连接呢?难道你的客户端连接上了服务端就要断开?
------其他解决方案--------------------遇到过这样的问题,可能是访问的人过多,过一段时间在访问
------其他解决方案--------------------我也觉得是服务端没有监听的原因 服务端没监听 客户端连接的时候就会报这个错
------其他解决方案--------------------
+1
小于1024的端口号大多数都已经被占用或者预留作特殊用途了 http://baike.baidu.com/view/642103.htm
服务端可以开异步线程来处理业务,以保证及时处理新收到的请求
------其他解决方案--------------------自己顶一下,坐等牛人出现~~~
------其他解决方案--------------------ip不正确或端口未开启,在不就看下是否网络连接上了。 一般前者的可能性大。
------其他解决方案--------------------需要保证服务器端一直处于监听状态
------其他解决方案--------------------请问什么情况会导致线程的资源没有释放,以及如何释放当前接受的传输线程呢??
------其他解决方案--------------------
没玩过
帮顶
------其他解决方案--------------------嗯,Socket,学习下
------其他解决方案--------------------
可能你断开的时候,只是关闭了套接字,但是没有立即释放线程,也就是说:虽然关掉套接字,线程也会随着释放,但是这个释放是通过gc释放的,而gc释放的话就需要一些时间,当你连续点击连接和断开的时候,有可能gc没有释放完上个线程的资源,所以。。。
还有可能是服务器上的监听自动关闭了,我想想可能是这个原因,你调试下服务器端看看
------其他解决方案--------------------怎么确定服务器端的监听是否自动关闭呢?
如果把listen()的参数写的很小比如2,就不会出现这个问题了;相反如果把listen()的参数写的很大比如200,就很容易出现这个问题。
------其他解决方案--------------------我想找出问题出在哪里,但是本人对Socket只了解点皮毛,所以不知道该如何去找对应的问题。
比如:如何查看服务器的连接数?如何查看TCP连接队列和TCP等待连接的队列?
------其他解决方案--------------------
你可以调试下服务器端看看具体的是什么造成的,还有你的端口号最好是大于1024,呵呵
------其他解决方案--------------------