我的网络应用需要通过soket与本地网络中的设备通信。我正在尝试在端口上打开ServerSocket> 45000并听取传入连接。在我开发它并将其作为一个独立的东西运行时,实现它的类非常有效,但是当我尝试在Tomcat下运行它作为我的web应用程序的一部分时,它会引发异常。
我该怎么做才能解决这个问题?我确实需要监听该端口,并且它不是通过它接收的HTTP流量,因此我无法通过在config.xml文件中打开它来收听它。
基本上,这是失败的代码:
private void start() {
ServerSocket s = 0;
try {
s = new ServerSocket(45678); // this is line 38 (see stacktrace)
} catch (IOException e) {
Misc.log("Could not listen on port: 45678.\n" + Misc.getStackTrace(e));
// System.exit(-1);
}
...
}
这是stacktrace:
Could not listen on port: 45634. java.net.BindException: Address already in use: JVM_Bind at java.net.PlainSocketImpl.socketBind(Native Method) at java.net.PlainSocketImpl.bind(Unknown Source) at java.net.ServerSocket.bind(Unknown Source) at java.net.ServerSocket.<init>(Unknown Source) at java.net.ServerSocket.<init>(Unknown Source) at x.x.x.userland.logging.WebServer.start(WebServer.java:38) ...
感谢您的帮助。 最好的祝福, 提莫菲。
UPD 添加了堆栈跟踪的顶部。 PS。即使我第一次运行它也会写它
UPD 2 事实证明,该端口被称为Coyote ......
的东西使用INFO: Initializing Coyote HTTP/1.1 on http-80 28.09.2011 13:04:36 org.apache.coyote.http11.Http11Protocol init INFO: Initializing Coyote HTTP/1.1 on http-45634 28.09.2011 13:04:36 org.apache.catalina.startup.Catalina load INFO: Initialization processed in 267 ms
我会试图“追求”土狼不要使用它。它可以完成吗?
答案 0 :(得分:2)
无法收听端口:45634。 java.net.BindException:已在使用的地址:JVM_Bind
这意味着该端口正在使用中。也许通过您用来测试它的独立程序。也许它没有正确关闭,需要超时。
暂时尝试使用其他端口号,并确保在完成后关闭套接字。