2015-04-28 36 views
1

所以我想使用BufferedReader和BufferedWriter製作服務器/客戶端解決方案,但它不會工作!只使用DataInputStream和DataOutputStream工作得很好,但沒有用Buffered對象打印出來。我的錯誤在哪裏?套接字:BufferedReader/InputStream&BufferedWriter/OutputStream將不起作用

public class TServer { 

    static final int PORT = 8001; 
    static final int QUEUE = 50; 

    public static void main(String[] args) { 
     try (ServerSocket serverSocket = new ServerSocket(PORT, QUEUE)) { 
      Socket socket = serverSocket.accept(); 
      BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 

      System.out.println(input.readLine()); 
      output.write("this is the server!"); 
      output.flush(); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 


public class TClient { 

    static final String HOST = "localhost"; 
    static final int PORT = 8001; 

    public static void main(String[] args) { 
     try (Socket socket = new Socket(HOST, PORT)) { 
      BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); 

      output.write("this is the client"); 
      output.flush(); 
      System.out.println(input.readLine()); 
     } catch (IOException e) { 
      System.out.println(e.getMessage()); 
      e.printStackTrace(); 
     } 
    } 
} 
+0

http://sourceforge.net/p/tus/code/HEAD/tree/tjacobs/io/ServerSocketEx.java#l165可能對您有所幫助 – ControlAltDel

回答

1

只使用DataInputStream和DataOutputStream類的工作完全正常,但沒有打印出來與緩衝對象。

客戶端發送以下內容:

output.write("this is the client"); 

服務器嘗試讀取與BufferedReader中的一行:

System.out.println(input.readLine()); 

但不會出現線路收到行結束終止符不被髮送(因此,該方法將被阻塞(對於不發送行結束符的服務器也是如此))。請參閱BufferedReader的API,其中聲明:

讀取一行文字。換行符被換行符('\ n'),回車符('\ r')或回車符後面的換行符中的任何一個結束。

0

您正在使用BufferedReader的readLine方法,因此您應該在相應的BufferedWriter中寫入換行符終止的字符串。像:

output.write("this is the client"); 
    output.newLine();