Tomcat,打开一个套接字 - 不起作用

时间:2011-09-28 08:34:40

标签: sockets tomcat tomcat6

我的网络应用需要通过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

我会试图“追求”土狼不要使用它。它可以完成吗?

1 个答案:

答案 0 :(得分:2)

  

无法收听端口:45634。   java.net.BindException:已在使用的地址:JVM_Bind

这意味着该端口正在使用中。也许通过您用来测试它的独立程序。也许它没有正确关闭,需要超时。

暂时尝试使用其他端口号,并确保在完成后关闭套接字。