2017-07-26 136 views
0

嗨我有一個應用程序發送文本到設備,設備顯示它在顯示器上。在一個AsyncTaskreadLine套接字輸入流導致在套接字掛起

  try { 
       Socket socket = new Socket(DISPLAY_IP, DISPLAY_PORT); 
       OutputStream out = socket.getOutputStream(); 
       PrintWriter output = new PrintWriter(out); 
       output.println(params[0]); 
       output.flush(); 
       socket.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

轉移我使用套接字數據的問題是發送數據後,我無法讀取從插座響應。當我從套接字和閱讀線獲取輸入流時,我沒有收到任何信息,設備也沒有顯示從我發送的數據,直到我關閉應用程序,因此我認爲套接字在我這樣做時被阻止。

  try { 
       Socket socket = new Socket(DISPLAY_IP, DISPLAY_PORT); 
       OutputStream out = socket.getOutputStream(); 
       PrintWriter output = new PrintWriter(out); 
       output.println(params[0]); 
       output.flush(); 
       BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
       String response = bufferedReader.readLine(); 
       socket.close(); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

如何發送數據並從套接字讀取響應?

+0

不是很確定問題是什麼,但readLine()被認爲是掛起 - 直到一行實際上由另一端發送(或直到連接超時或斷開)。我建議嘗試使用netcat發送相同的消息並查看是否得到響應 - 這可能是服務器而不是客戶端的問題。 – SirGregg

+0

服務器收到我剛剛發送的數據後向我發送'OK',那麼我該怎麼辦? @SirGregg –

回答

0

您正在嘗試與兩個(客戶)Socket s溝通。爲了溝通,您必須在一側實施(客戶端)java.net.Socket,另一側實施java.net.ServerSocket

您可以進一步閱讀here

+0

讓我試試看@PeterMmm –

0

你想達到什麼目的? 使用InputStream時,它將獲得來自另一端的數據,而不是剛剛發送的數據。 而SirGregg說readLine將掛起,直到收到整條線路。

+0

我需要知道服務器收到我的數據,所以它發回給我一個'好',我需要讀它 –

+0

@Amir_P可能服務器沒有發送\ n,所以線路沒有結束。 readLine將等待行尾字符 –