2012-05-22 190 views
0

您好我想了解如何套接字工作可以實現一個多玩家端到壟斷game.I理解如何創建連接,但現在看來我有困難之間發送和接收數據客戶端和服務器。這裏是我的代碼:Java套接字發送和接收數據

客戶端代碼:

public class EchoClient 
{ 
    public static void main(String[] args) 
    { 
    Socket echoSocket = null; 
    PrintWriter out = null; 
    BufferedReader in = null; 

    try 
    { 
     echoSocket = new Socket("127.0.0.1", 5000);; 
     out = new PrintWriter(echoSocket.getOutputStream()); 
     in = new BufferedReader(
      new InputStreamReader(echoSocket.getInputStream())); 

     BufferedReader stdIn = new BufferedReader(
      new InputStreamReader(System.in)); 

     String userInput; 

     while ((userInput = stdIn.readLine()) != null) 
     { 
     out.println(userInput); 

     } 

     out.close(); 
     in.close(); 
     stdIn.close(); 
     echoSocket.close(); 
    } 
    catch (UnknownHostException e) 
    { 
     System.err.println("Don't know about host: taranis"); 
    } 
    catch (IOException e) 
    { 
     System.err.println("Couldent get I/O for " 
      + " the connection to : taranis."); 
    } 

    } 
} 

Server代碼:

public class ServerSide 
{ 

    ServerSocket connect; 
    Socket connection; 
    PrintWriter out; 
    BufferedReader in; 

    public void go() 
    { 

    try 
    { 
     connect = new ServerSocket(5000); 
     connection = connect.accept(); 
     in = new BufferedReader(
      new InputStreamReader(connection.getInputStream())); 

     String userInput; 

     while ((userInput = in.readLine()) != null) 
     { 
     System.out.println("echo: " + in.readLine()); 
     } 

    } 
    catch (IOException e) 
    { 
     System.out.println(e); 
    } 
    } 

    public static void main(String[] args) 
    { 
    new ServerSide().go(); 
    } 
} 

,我想在這裏創建一個簡單的connectio n在客戶端和服務器之間。在客戶端,當用戶輸入數據時,我希望它被髮送到服務器,然後將它打印在服務器控制檯上。看起來,我喜歡代碼它不工作的方式是什麼我做錯了?

+0

定義 「不工作」。 – EJP

回答

0

首先,您需要聲明一個控制檯對象,然後在其上打印。
然後請不要忘記:
在服務器端的控制檯上進行每次打印後,您需要刷新流,以便打印所有數據。

0

你的代碼對我來說看起來很好。通常使用套接字和鍵盤輸入,你會遇到reader.readLine()掛起的情況,因爲它仍然試圖從另一側讀取輸入。通常,我會在客戶端的末尾放置一個空的out.println(),以便服務器終止閱讀while循環。我已經嘗試過flush()之前,因爲邁克建議,但這似乎不適用於我。

0

在客戶端上,您在out.println之後缺少out.flush;

在服務器上,

while ((userInput = in.readLine()) != null) { 
     System.out.println("echo: " + userInput); // not in.readLine 
    }