在windows下提示端口号不能绑定,但查无原因。

在windows下提示端口号不能绑定,但查无原因。
********************************************
Caused by: java.net.BindException: Address already in use: JVM_Bind
java.io.IOException: Transport Connector could not
server socket: tcp://0.0.0.0:61616 due to: java.net.BindException: Address already in use: JVM_Bind)

D:\tools_installed\Apache2.2\bin>httpd.exe
(OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试。  : make_sock: could not bind to address 0.0.0.0:61616
no listening sockets available, shutting down
Unable to open logs

D:\tools_installed\Apache2.2\bin>httpd.exe
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : make_sock: could not bind to address 0.0.0.0:1028
no listening sockets available, shutting down
Unable to open logs
********************************************
【问题】MQ提示不能绑定到端口号61616上。
【分析】
1、通过netstat命或者工具tcpview查看,61616并没有被实际的程序绑定;
2、通过其他软件验证,用Apache绑定到61616上,提示错误为:【OS 10013)以一种访问权限不允许的方式做了一个访问套接字的尝试】
3、通过Apache故意绑定到一个已存在的端口号,如1028,提示的错误为【(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。】
4、两次提示的错误不一样,说明端口号61616提示不能绑定,不是实际上有程序有绑定,而是软件之外,如windows或者其他安全软件由限制;
5、关闭windows防火墙和本机的安全软件后,同样提示端口号61616被绑定;
6、测试61616和61617等端口提示不能绑定,而稍高一点的端口号64617和稍低一点的60617都是ok的。
7、因为jdk和apach都不可以绑定到端口号61616,说明也不是windows防火墙限制某些程序访问某个端口的问题。
8、尝试修改windows注册表中的[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Tcpip\Parameters]=>ReservedPort,也没有解决此问题,因为从第6点也能引证,和windows预留端口号范围无关。
*、终止可以归结为os问题,但具体是什么问题还不清楚,因为换个windows环境,没有此问题了。

9、禁用掉安全软件Symantec和360,启动apache失败,再启用安全软件Symantec,启动apache成功。
10、最终原因可归结为本地的安全软件对某些端口号的限制,如360,比如在安全软件提示限制某些端口号,前台没有及时选择阻止还是允许,其会倒计时默认阻止掉对该端口号的访问的。

【解决】
1、由于没有分析到问题的具体原因,只有采取变通处理,修改端口号或者换windows环境。

Tip:还需要继续分析具体的问题原因。

2、windows自启动服务失败后,对应的端口号不会被释放。

需要检查本地的自启动服务是否绑定了该端口号。

3、根本原因是之前注册的EMQ服务,在windows安装显卡驱动后导致EMQ服务总启动不成功,但是其会占用端口号,用netstat是看不到的。

4、解决方法:卸载EMQ服务,重新注册该服务即可。

5、扩展方案:【问题】==>某个指定的端口提示不能绑定,但是该端口号通过netstat命令查看是没有的。
   解决:停止服务: Secure Socket Tunneling Protocol Service==>SstpSvc
      该服务依赖两个服务:Remote Access Connection Manager==>RasMan 和Internet Connection Sharing (ICS)==>SharedAccess

   【vip】通过sc delete命令删除掉360等主动防御服务并重启windows。

如果注册的服务没有,而进程有的话可以通过tasklist /svc查找,
       并用命令【taskkill /F /IM "ZhuDongFangYu.exe"】杀掉之。

注意:证明和360的主动防御没有关系:
///////////begin///////////
C:\Windows\system32>sc query |findstr Z
SERVICE_NAME: Pml Driver HPZ12
DISPLAY_NAME: Pml Driver HPZ12
SERVICE_NAME: ZhuDongFangYu

C:\Windows\system32>tasklist /svc |findstr Z
svchost.exe                   1904 Pml Driver HPZ12
ZhuDongFangYu.exe             2616 ZhuDongFangYu

C:\Windows\system32>
//////////end/////////////
还是需要停止服务Secure Socket Tunneling Protocol Service==>SstpSvc及关联服务。


Tip:【分析思路】

1、首先确认端口号是否实际上被占用,
1.1.如果不是,
   可用其他软件测试本端口号是否可用,
      如果可用,说明是当前软件启动方式或者配置问题,
      如果不可用,说明是windows环境问题。
1.2.如果是,则考虑换端口号,或者将占用端口号的程序或者服务停掉。

猜你喜欢

转载自can-do.iteye.com/blog/2244464