2017-07-26 80 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将等待行尾字符 –