连接python套接字和java套接字

我一直在尝试在Java客户端套接字和Python服务器套接字之间发送一个简单的字符串。 这是服务器套接字的代码:

HOST='' PORT=12000 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADRR,1) s.bind((HOST,PORT)) s.listen(5) device=variador() while True: conn,addr=s.accept() if data=="turn_on": respuesta=device.send_order(variador.start_order) conn.send(respuesta+'\n') conn.close() 

并且客户端代码是:

  try { Socket socket = new Socket("192.168.10.171", 12000); PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader( socket.getInputStream())); BufferedReader stdIn = new BufferedReader( new InputStreamReader(System.in)); out.print(command); out.close(); in.close(); socket.close(); } catch (UnknownHostException e) { System.err.println("Unknown Host."); // System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O for " + "the connection."); // System.exit(1); } 

一切正常,直到我尝试读取服务器的响应,使用此:

  String userInput; while ((userInput = stdIn.readLine()) != null) { out.println(userInput); System.out.println("echo: " + in.readLine()); } 

然后代码挂起,Python服务器没有收到任何信息,我用print测试过。

尝试先发送然后等待Java客户端服务器的响应是否有问题?

任何帮助都感激不尽。

好吧,我发现java客户端挂起,因为python服务器发送的消息没有用\ r \ n显式完成,所以python代码应该是这样的:

  HOST='' PORT=12000 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADRR,1) s.bind((HOST,PORT)) s.listen(5) device=variador() while True: conn,addr=s.accept() if data=="turn_on\r\n": respuesta=device.send_order(variador.start_order) conn.send(respuesta+'\r\n') conn.close() 

我知道它应该从java,readline()和println中的方法名称中显而易见,两者都表明java以序列\ r \ n结束字符串

如果您只想在套接字连接上发送单个命令,则在编写命令后关闭OutputStream(使用Socket.shutdownOutput())。 套接字读取直到EOF,并且在关闭套接字之前不会收到EOF。 因此,您的代码永远不会继续。

Source – java socket InputStream在客户端和服务器上挂起/阻塞

希望能帮助到你!