[解决]通常每个套接字地址只允许使用一次

Posted 网络虫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[解决]通常每个套接字地址只允许使用一次相关的知识,希望对你有一定的参考价值。

我们在做socket的开发的时候,经常会遇到这个错误:通常每个套接字地址 (协议/网络地址/端口)只允许使用一次

错误指示很明确:通信端口被占用了,导致通信无法进行。

但为什么端口被占用了呢?什么端口被占用了?

这里其实有一个大前提:你的程序中有没有指定socket通信端口?

如果指定了,解决办法很简单,每次通信完成手动释放就行了。下次通信重新建立连接。

如果没有指定,说明以下几点(可能你命中的是其中一点):

1、你的服务器开启的端口数太少;

2、连接释放等待时间太长;

3、你的socket通信并发量太大。

以上几点导致你服务器端口被占满,下次通信无空闲端口可用,程序就抛出了“通常每个套接字地址 (协议/网络地址/端口)只允许使用一次”的异常。

 

原因找到了,解决起来也就简单了,针对1、2两点,我们修改服务器配置就行了。

如果你的服务器是windows2003或xp,默认端口只开到5000,而且超时等待默认是240秒(这里有官方说明:http://msdn.microsoft.com/zh-cn/library/aa560610(v=bts.10).aspx),我们只需把服务器端口全打开,并且根据自己的情况调整超时时间。

具体操作:

1、打开注册表(运行命令:regedit)

2、找到注册表节点:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters

3、新增2项(如果已存在就修改项值),值对应的都是10进制数字

MaxUserPort=65534 (端口数设到最大)

TcpTimedWaitDelay=5 (超时等待是5秒,根据个人需要)

4、重启服务器

 

搞定!

以上是关于[解决]通常每个套接字地址只允许使用一次的主要内容,如果未能解决你的问题,请参考以下文章

Windows socket error: 通常每个套接字地址(协议/网络地址/端口)只允许使用一次.(10048)

MySQL/PHP 错误:[2002] 每个套接字地址(协议/网络地址/端口)通常只允许使用一次

socket:通常每个套接字地址(协议/网络地址/端口)只允许使用一次

HttpClient:每个套接字地址(协议/网络地址/端口)通常只允许使用一次

无法绑定地址 [10048]:每个套接字地址(协议/网络地址/端口)通常只允许使用一次

如何修复错误“每个套接字地址(协议/网络地址/端口)通常只允许使用一次”?