2012-02-07 45 views
0

您好我想測試,如果我的客戶端應用程序正在測試它在一個非常簡單的Java服務器上工作。我的客戶幾乎每秒都會發送一個字符串。我的想法是,服務器一旦收到字符串就會在eclipse控制檯中顯示字符串。但問題是,簡單的java服務器只打印出第一個字符串。下面是一個簡單的Java服務器我從sitejava服務器(簡單的例子)只顯示第一個字符串發送

package serverjava; 

/* ChatServer.java */ 
import java.net.ServerSocket; 
import java.net.Socket; 

import java.io.IOException; 
import java.io.BufferedReader; 
import java.io.InputStreamReader; 

public class serverjava { 
    private static int port = 1234; /* port the server listens on */ 

    public static void main (String[] args) throws IOException { 
     ServerSocket server = null; 
     try { 
      server = new ServerSocket(port); /* start listening on the port */ 
     } catch (IOException e) { 
      System.err.println("Could not listen on port: " + port); 
      System.err.println(e); 
      System.exit(1); 
     } 

     Socket client = null; 
     try { 
      client = server.accept(); 
     } catch (IOException e) { 
      System.err.println("Accept failed."); 
      System.err.println(e); 
      System.exit(1); 
     } 

     /* obtain an input stream to the client */ 
     BufferedReader in = new BufferedReader(new InputStreamReader(
        client.getInputStream())); 

     String msg; 
     /* loop reading lines from the client and display them */ 
     while ((msg = in.readLine()) != null) { 
      System.out.println("Client says: " + msg); 
     } 
    } 
} 

了是Java服務器能夠顯示每推出一個字符串的只有一個實例?如果是的話,我該如何打印或在控制檯中顯示每秒發送的所有字符串?

+0

如果您的客戶端每次都關閉連接,這是預期的。 – Mat 2012-02-07 09:53:56

+0

是的,客戶端幾乎每秒都會關閉,幾乎每秒都會嘗試連接併發送。我應該怎麼用我的簡單的java服務器測試儀? – coollearner 2012-02-07 10:13:37

回答

0

您遇到的問題是您只有一次讀取緩衝區。服務器等待客戶端行,當它讀取它們時,它會完成執行,因爲'msg'爲空。您必須有一個每秒鐘或每分鐘或每小時讀取的進程...這意味着使用線程

要小心!不要使用類似的東西(true)結構,因爲機器會過載。

+0

感謝您的幫助和意見。我使用鏈接http://pguides.net/java/tcp-client-server-chat 中的其他代碼,現在就可以工作。 – coollearner 2012-02-07 10:34:46

相關問題