在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.如果是,则考虑换端口号,或者将占用端口号的程序或者服务停掉。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat是一种流行的Web服务器和Servlet容器,通常用来部署和运行Java Web应用程序。但是,使用Tomcat时,我们可能会遇到端口号占用的问题。 当我们启动Tomcat时,它会使用指定的端口号来监听HTTP请求。如果该端口已经被其他进程使用,则Tomcat将无法启动,并发出“端口号已被占用”的错误信息。这是因为操作系统不允许两个进程同时使用同一个端口。 为了解决这个问题,我们需要查找并关闭占用端口的进程。可以使用netstat命令(在Windows下)或lsof命令(在Linux和Mac OS X下)来查找占用某个端口的进程。 例如,在Windows命令提示符下,我们可以运行以下命令: netstat -ano | findstr :8080 其中,8080是我们要查找的端口号。该命令将显示所有正在使用该端口的进程ID(PID)。然后,我们可以使用任务管理器或任务终止命令(taskkill)来关闭这些进程。 另外,我们可以修改Tomcat的配置文件,将其绑定到其他可用端口: 1.打开Tomcat的配置文件server.xml 2.找到Connector标签,如下所示: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 3.将port属性的值修改为其他可用的端口号,如: <Connector port="8888" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> 4.保存并重新启动Tomcat。 在实际开发和部署过程中,端口号占用是一个经常遇到的问题。我们需要了解如何查找占用端口的进程并关闭它,或者修改配置文件来绑定其他端口。这样,我们就可以顺利地启动和运行Tomcat,从而更好地进行Web开发和部署工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值