2011-12-08 134 views
0

我目前使用Reliable UDP協議的Java實現,發現[here] [1]。該項目絕對沒有教程,所以我發現很難發現問題。Java異常 - 套接字已關閉,可靠的udp幫助?

我已經建立了客戶端和服務器。服務器在localhost:1234上運行,客戶端在localhost:1235上運行。服務器首先建立,並循環監聽連接。

然後我設置它發送一個數據包到服務器。當發送數據包,服務器調用handlePacket() -

DataInputStream i = new DataInputStream(client.getSocket().getInputStream()); 
      short packetID = i.readShort(); 
      i = null; 
      switch(packetID){ 
       case 3: 
        Packeta packeta = new Packeta(client); 
       break; 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

我目前使用一個名爲Packeta小啞類調試。當構造函數被調用時,它從流中讀取日誌並將其發送到控制檯。然而,總是構建時,它掛起10秒,產生錯誤之前 -

java.net.SocketException異常:在 lessur.engine.net.packets.Packeta關閉套接字....
。 (Packeta.java:15)

的構造Packeta -

public Packeta(LessurConnectedNode c) { 
     super((short)3, c); 
     try { 
      /*LINE 15*/ Logger.getLogger("adsfas").info("X was "+c.getSocket().getInputStream().read()); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

它有一些待辦事項與輸入流。我不知道什麼是錯誤的,但是從閱讀其他線索來看,它可能是有多個輸入流的。我迷失了,請幫助。

+0

是不是客戶端和服務器應該連接到同一個套接字?例如服務器連接到本地主機:1234和客戶端到本地主機:1234? – glindste

+0

它在本地機器上如此 – liamzebedee

+0

我不明白問題的所有細節,但最近我在其他情況下有相同的例外。在我的情況下套接字被連接超時關閉,我通過增加服務器的連接超時參數來解決問題 – shurik2533

回答

0

問題是,我在將套接字完全初始化之前將服務器傳遞給套接字偵聽器。固定!