错误信息
从官网新下载的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连接失败导致,那么根据此条线索,进行摸索。。。
- 第一个排查点是服务器的防火墙是否开启
- 查看端口号是否开启
- 查看对应端口号是否开启
原谅我基础不是很扎实,当时看到这里,防火墙是关闭的,端口也是开放的,然后面向百度编程了半小时。。。突然发现好像有哪里不对
- 这里发现了致命的区别
IPv4 地址表示法为 xxx.xxx.xxx.xxx
IPv6 地址表示法为 x:x:x:x:x:x:x:x
而公司服务器的ip为xxx.xxx.xxx.xxx,这明显就是IPv4啊,掉进了互联网协议的坑里。。。
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"
- 禁用掉IPv6:禁用IPv6
文章参考
- https://www.ibm.com/support/knowledgecenter/zh/ssw_ibm_i_72/rzai2/rzai2ipv6addrformat.htm
- https://blog.csdn.net/chao199512/article/details/86139714
- https://www.jianshu.com/p/697320673d2c
- https://www.yiibai.com/ipv4/ipv4_address_classes.html
- https://blog.csdn.net/ccscu/article/details/7814028
- https://www.jianshu.com/p/4b0afe75990e
- https://www.jianshu.com/p/bb951b2c76b6
Ending
初入Java,经验不足,感谢各位大佬分享的经验技巧,向大佬学习!