2013-08-18 38 views
1

問題解決:我忘記在客戶端刷新PrintWriter如果在裏面,而

我對此代碼有問題。輸出是1,2,3,4,5,5.5,但它不會達到6或5.75,我無法弄清楚什麼是錯的。這是一個使用套接字的客戶端/服務器應用程序。

客戶:

System.out.println("1"); 
socket = new Socket("localhost", 1035); 
System.out.println("2"); 
br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
System.out.println("3"); 
pw = new PrintWriter(socket.getOutputStream()); 
System.out.println("4"); 

pw.println("hello"); 
String message = null; 
System.out.println("5"); 
boolean done = false; 

while(!done) { 
    System.out.println("5.5"); 
    if((message = br.readLine()) != null) { 
     System.out.println("6"); 
     cardname.setText(message); 
     done = true; 
    } 
    System.out.println("5.75"); 
} 
System.out.println("7"); 

服務器:

 @Override 
     public void run() { 
      String message = null; 
      boolean done = false; 
      try { 
       System.out.println("5.25"); 
       while(!done) { 
        System.out.println("5.5"); 
        if((message = br.readLine()) != null) { 
         System.out.println("6"); 
         String resp = handleRequest(message, sock.getInetAddress()); 
         pw.println(resp); 
         pw.flush(); 
         System.out.println("7"); 
        } 
        System.out.println("5.75"); 
       } 
       connDec(); 
      } catch(Exception ex) {ex.printStackTrace();} 
     } 
+7

它可能被'br.readLine()'阻塞。確保服務器上的數據可用 – Reimeus

回答

4

您的代碼可能在readLine()調用塊。 readLine()阻塞,直到它檢測到\n或EOF,所以除非你的套接字連接實際上發送了其中一個終端,否則它將等待一個。

+0

但是,如果它沒有檢測到任何內容,它應該返回null並寫入5.75並重試。 –

+0

@KevinFurmanski它不打印5.75,因爲它永遠不會到達那裏。您的代碼卡在readLine()調用中。 –