从套接字python服务器接收消息

qyyhg6bp  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(363)

这个问题在这里已经有答案了

bufferedreader readline方法挂起并阻止程序(3个答案)
19天前关门了。
我试图用bufferreader读取套接字上的消息
我的委托人:

Socket socket = new Socket("10.0.0.4", 12345);

BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));

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

我的python服务器:

(client, (address, _)) = server.accept()  # Accept to new clients (Accept to new command from the phone)
client.send("Hello from server")

但是,当我从服务器向客户机发送消息时,代码就在最后一行 System.out.println(in.readLine()); 好像他在等什么。
当我关掉服务器时,我得到一个错误。
如何用java读取服务器的输入?

mwecs4sa

mwecs4sa1#

正如@james comment所说,您似乎在等待服务器没有发送的回车符或换行符(整行)。
这会导致您的代码永远等待 \n , \r 或者 \r\n 收到。 readLine() 读一行文字。行被认为是由换行符('\n')、回车符('\r')或紧跟换行符的回车符之一终止的。
所以你的 in.readline() 从不考虑线路的终止,而是满怀希望地等待它的结束。为了避免这种情况,请不要发送:

client.send("Hello from server")

发送

client.send("Hello from server\n")

或者更好的是,检查python库是否有类似于 sendLine() 方法。
为了循环接收服务器的消息,类似这样的操作可能会起作用:

while (socket.isConnected()) 
{
  String inputLine;
  while ((inputLine = in.readLine()) != null)
      System.out.println(inputLine);
}

相关问题