2014-06-07 50 views
0

我有它使用一個內部代理服務器來分析HTTP TRAFIC一個Web應用程序(在瀏覽器 - 棱鏡或Chrome /鉻)一個java應用程序,它實際上是一個同一個應用程序的一部分。在此基礎上執行一些動作TRAFIC分析...java.net.SocketException異常:插座關閉在CentOS(Linux)的

應用程序運行以及在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有關,但沒有幫助我很多。

回答

0

您正在將應用程序中的ServerSocket關閉,而此代碼在accept()中被阻止。

+0

您的回答讓我從其他整體角度來看代碼。我發現其他線程關閉了套接字。但是這不是我的代碼中的錯誤,它是按照設計工作的。後來我發現在該平臺上Chromium存在問題,並且不會從那裏開始。因此;我的代碼無法啓動它,並且線程負責檢查瀏覽器是否正在運行結束代理線程(封閉套接字)。然後,整個應用程序正常關閉......我正在尋找錯誤位置的錯誤,並且我沒有想到Chromium可能是問題... – smory