java.net.SocketException:在CentOS上关闭套接字(Linux)

时间:2014-06-07 18:45:19

标签: java linux sockets proxy

我有一个java应用程序,它使用内部代理服务器来分析Web应用程序的http trafic(在浏览器中 - Prism或Chrome / Chromium),它实际上是同一个应用程序的一部分。根据交通分析,它执行一些行动......

该应用程序在Windows(XP,7和8)中运行良好,我也在Ubuntu和Suse中使用它没有任何问题。最近一个新的潜在客户希望在CentOs中测试它,但我得到了java.net.SocketException:Socket关闭了。 以下代码产生此异常(实现Runnable):

   public void run() {
    try {
        // create a server socket, and loop forever listening for
        // client connections
        synchronized (this) {
            server = new ServerSocket(thisPort);
            notifyAll();
        }
        while (true) {
            if(server.isClosed()){ // I added this just to see if it helps...
                server = new ServerSocket(thisPort);
            }
            Socket client = server.accept();  // Exception thrown here

            ProxyThread t = new ProxyThread(client, fwdServer, fwdPort); // new Thread takes care of comunication, no issues there at all...
            t.setDebug(debugLevel, debugOut);
            t.setTimeout(ptTimeout);
            t.start();
        }
    } catch (Exception e) {
            debugOut.println("Proxy Thread error: " + e);
            e.printStackTrace();

    }

    closeSocket();
}

跟踪:

java.net.SocketException: Socket closed
    at java.net.PlainSocketImpl.socketAccept(Native Method)
    at java.net.AbstractPlainSocketImpl.accept(Unknown Source)
    at java.net.ServerSocket.implAccept(Unknown Source)
    at java.net.ServerSocket.accept(Unknown Source)
    at sk.tido.simpleproxy.Proxy.run(Proxy.java:20)

系统信息:

CentOS release 6.3 (Final)
Linux pcpanel 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

我用2个版本的java namelly测试了它:

java version "1.7.0_60"
Java(TM) SE Runtime Environment (build 1.7.0_60-b19)
Java HotSpot(TM) 64-Bit Server VM (build 24.60-b09, mixed mode)

java version "1.6.0_24"
OpenJDK Runtime Environment (IcedTea6 1.11.1) (rhel-1.45.1.11.1.el6-x86_64)
OpenJDK 64-Bit Server VM (build 20.0-b12, mixed mode

任何建议都受到欢迎,因为应用程序在其他Linux发行版中已经运行了近2.5年...... 我只能找到像我这样的类似问题,但与网上的httpclient有关,这对我没什么帮助。

1 个答案:

答案 0 :(得分:0)

您正在关闭应用程序中其他位置的ServerSocket,而此代码在accept()中被阻止。