修改注册表,主要是下面几个
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
TcpNumConnections = 0x00fffffe
MaxUserPort=65535
我也怀疑过可能跟端口有关,不过出错后我重新连接还是没有问题,如果是端口不够用的话,应该会连续报错吧。而且就算是端口不够用了,这种该注册表的办法也是治标不治本啊
@逸*风: 默认情况下只会使用5000一下端口,close之后的socket也会有一段时间处于timewait状态占着端口的。用tcpview看一下,所有的端口是不是都是5000一下的。
@Greatest: 对,是只有大概5000个左右是系统分配的端口,不过我用netstat看了一下,处于timewait状态的端口只有20个左右
首先,断开的时候,你要确定调用了CloseSocket这个函数(是不是叫这个名称我忘记了,总之就是关了Socket连接)
其次,这个关闭连接并不会立刻释放Socket所占用的端口,有一个系统的Timer参数,在过了这个Timer时间以后,这个Socket才会真的被释放.
从上面两点来入手试着找一下解决方案.
首先,close是确定调用了,我在服务端有监控连接数,连接一直是一个,只有端口号在变。端口释放的话,我测试的时候操作间隔至少2秒,而端口有6万多个,等我用到6万多个的时候,前面用过的端口怎么也该释放完了吧,所以我偏向于问题不是出在端口上