2012-11-22 57 views
2

因此,我的程序的最終結果是更新遊戲客戶端,但到目前爲止,我所能夠接受多個連接的服務器以及連接到服務器的客戶端。這是客戶端部分的代碼:Java插槽問題

public void client() { 
    Socket socket = null; 
    ObjectInputStream in = null; 
    ObjectOutputStream out = null; 

    try { 
     socket = new Socket(IP, Integer.parseInt(port)); 
     in = new ObjectInputStream(socket.getInputStream()); 
     out = new ObjectOutputStream(socket.getOutputStream()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    do { 
     // have a conversation 
     try { 
      message = (String) in.readObject(); 
      System.out.println("\n" + message); 
     } catch (Exception e) { 
      System.out.println("\n idk wtf that user sent!"); 
     } 
    } while (!message.equals("CLIENT - END")); // When the user types "END" 

    System.err.println("CLOSED!!!"); 
    System.exit(0); 
} 

,這是服務器部分的代碼:

public void run() { 
    // where everything happens 
    System.out.println("server- connected"); 
    try { 
     in = new ObjectInputStream(socket.getInputStream()); 
     out = new ObjectOutputStream(socket.getOutputStream()); 

     out.writeObject("hi"); 
     out.flush(); 
     Thread.sleep(5000); 
     out.writeObject("close"); 
     out.flush(); 
     System.out.println("closed"); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 

現在,我遇到了這個問題,即,當我的服務器發送對象"hi"客戶似乎沒有收到它。我不完全確定它是否可以,但如果它得到它,它不會像我想要的那樣印出來。我以前已經做了一個聊天程序,做同樣的事情,我幾乎複製它,但它不是溝通。我得到的最多的是確認他們是連接的。我不知道發生了什麼,但任何幫助將不勝感激!提前致謝!

+0

您是否獲得了System.out.println行的輸出(「server-connected」);? – Ashwin

+0

是的,我願意。當我嘗試發送對象時,問題開始發生 – PulsePanda

+0

您是否嘗試過發送對象?作爲JSON編碼的對象? [檢查這個帖子](http://www.dreamincode.net/forums/topic/260789-sending-json-objects-through-tcp/) – Killrawr

回答

4

創建ObjectOutputStreams 的ObjectInputStreams前和創建後立即它們沖洗。

構造函數 ObjectInputStream讀取流頭。這個流標題是由ObjectOutputStream的構造函數寫成的(這是一種醜陋的實現,但它就是這樣)。如果您首先構建OIS,則會掛起等待標題字節。

+0

這是什麼原因? – Ashwin

+0

表示同意,這是一個非常簡單的解決方案,但它爲什麼會發生? – PulsePanda

+0

@wbAnon - 添加說明。在java中使用套接字和對象流時,這是一個相當知名的問題。 – jtahlborn