tomcat启动报错:java.io.IOException: Transport endpoint is not connected

错误信息

从官网新下载的tomcat,放到Linux服务器上启动,出现如下信息

06-Jan-2020 19:42:07.455 SEVERE [http-nio-9002-Acceptor-0] org.apache.tomcat.util.net.NioEndpoint$Acceptor.run Socket accept failed
 java.io.IOException: Transport endpoint is not connected
	at sun.nio.ch.ServerSocketChannelImpl.accept0(Native Method)
	at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:422)
	at sun.nio.ch.ServerSocketChannelImpl.accept(ServerSocketChannelImpl.java:250)
	at org.apache.tomcat.util.net.NioEndpoint$Acceptor.run(NioEndpoint.java:455)
	at java.lang.Thread.run(Thread.java:748)

问题分析

通过异常信息可以判断是由于socket连接失败导致,那么根据此条线索,进行摸索。。。

  • 第一个排查点是服务器的防火墙是否开启
  1. 查看centos版本
  2. 查看centos6和7防火墙的状态
    在这里插入图片描述
  • 查看端口号是否开启
  1. 查看对应端口号是否开启
    在这里插入图片描述
    原谅我基础不是很扎实,当时看到这里,防火墙是关闭的,端口也是开放的,然后面向百度编程了半小时。。。突然发现好像有哪里不对
    在这里插入图片描述
  • 这里发现了致命的区别
IPv4 地址表示法为 xxx.xxx.xxx.xxx
IPv6 地址表示法为 x:x:x:x:x:x:x:x

而公司服务器的ip为xxx.xxx.xxx.xxx,这明显就是IPv4啊,掉进了互联网协议的坑里。。。

  • 抓住救命稻草,赶紧复习一波IPv4和IPv6的区别
  • 到这里还不死心,于是看了下服务器上是否用的是IPv6 传送门
lsmod |grep ip

到这里发现果然使用的是IPv6,于是有了接下来的两个思路

解决方式

  • 在Java程序启动时,手动指定寻址方式,这里直接修改的是tomcat目录下的/conf/catalina.sh中的内容
export JAVA_OPTS="Djava.net.preferIPv4Stack=true"

或者

JAVA_OPTS="$JAVA_OPTS -Djava.net.preferIPv4Stack=true -Djava.net.preferIPv4Addresses=true"

文章参考

Ending

初入Java,经验不足,感谢各位大佬分享的经验技巧,向大佬学习!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值