Python-Steckdose und Steckdose anschließen

Ich habe versucht, eine einfache Zeichenfolge zwischen einem Java Client Socket und einem Python Server Socket zu senden. Dies ist der Code für die Server-Sockel:

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() 

Und der Client-Code ist:

  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); } 

Alles funktioniert gut, bis ich versuche, die Antwort des Servers zu lesen, mit diesem:

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

Dann hängt der Code und der Python-Server erhält keine Informationen, die ich mit Druck getestet habe.

Gibt es ein Problem, das versucht, zuerst zu senden und dann auf eine Antwort vom Server im Java-Client zu warten?

Jede Hilfe wird sehr geschätzt.

2 Solutions collect form web for “Python-Steckdose und Steckdose anschließen”

Nun, ich entdeckte, dass der Java-Client hängt, weil die Nachrichten, die vom python-Server gesendet wurden, nicht explizit mit \ r \ n beendet wurden, also sollte der Python-Code so etwas sein:

  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() 

Ich weiß, dass es aus dem Namen der Methoden in Java, readline () und println ganz offensichtlich sein sollte, was darauf hindeutet, dass Java die Zeichenfolgen mit der Sequenz \ r \ n beendet

Wenn Sie nur einen einzigen Befehl an die Socket-Verbindung senden möchten, schließen Sie den OutputStream nach dem Schreiben des Befehls (mit Socket.shutdownOutput ()). Die Steckdose liest bis EOF und Sie erhalten keine EOF, bis Sie die Steckdose schließen. Daher geht euer Code nie weiter.

Source – Java Socket InputStream hängt / blockiert auf Client und Server

Ich hoffe es hilft!

  • Python: Hör auf zwei Ports
  • Mehrere Schreibvorgänge werden als einzeln behandelt
  • Loop Socket Anfrage alle 5 Sekunden (Python)
  • Scapy sniff () "eine Operation wurde auf etwas durchgeführt, das kein Sockel ist"
  • Python - SSL - falsche Versionsnummer
  • Python asyncio laufen event loop einmal?
  • Python-UDP-Buchse halb zufällig fehlgeschlagen
  • Thread-Synchronisation in Python
  • Persistentes DNS-Caching, das von Pythons Socket.getaddrinfo / mercurial nicht genutzt wird
  • Python-Konsolen-Eingabe-Ausgabe benötigt Threading?
  • Sudo Command mit Paramiko ausführen
  • Python ist die beste Programmiersprache der Welt.