2013-10-31 96 views
0

我正在嘗試學習java套接字編程,但是我在InputStream的讀取功能方面遇到了問題。 首先,我創建了一個連接到服務器的套接字。建立連接後,服務器將發回「連接已建立」的消息,並且讀取功能正常工作。然後我嘗試向服務器發送字節消息,但是我無法從InputStream讀取數據,因爲我的程序停留在「in.read(buf)」行。任何人都可以指出我如何解決這個問題。無法從InputStream中讀取數據

Socket client = new Socket("xxx.xxx.xxx.xxx", 45000); 
    InputStream in = client.getInputStream(); 
    OutputStream out = client.getOutputStream(); 
    for (int i = 0; i < 5; i++) { 
     byte[] buf = new byte[1024]; 
     int data_size = in.read(buf); 
     String msg = ""; 
     for (int j = 0; j < data_size; j++) { 
      msg += String.valueOf((char) buf[i]); 
     } 
     System.out.println(msg); 
     out.write(65); 
     out.flush(); 
    } 
+1

卡住讀取的最常見原因是無法發送任何數據。你能告訴我們你的寫作代碼嗎?你確定知道至少有5 KB的數據發送? –

+0

http://www.javaworld.com/jw-12-1996/jw-12-sockets.html?page=3 – ajc

回答

1

InputStream.read()是一個阻塞調用。考慮到你提供的代碼,在寫入套接字之前,你正在從套接字讀取數據,所以你將永遠阻止第一次讀取。或者至少在超時之前。

-1

@Peter可能是正確的。另外,在使用它們之後關閉流可能有助於避免意外問題。

+0

未關閉不會導致讀取失敗。 – EJP