2016-07-20 8 views
0

Ich versuche, Befehle zu einem Rasberry Pi mit einem Python-basierten Socket-Server zu senden, wo der Server verschiedene Zeichenfolge Befehl, etwas tun und dann warte auf den nächsten Befehl.Python-Socket-Server mit Java-Client - socket.error: [Errno 32] Gebrochene Leitung

Ich habe einen Socket-Server in Python geschrieben auf einem Himbeer-pi läuft:

import socket 

HOST = '' # Symbolic name meaning the local host 
PORT = 11113 # Arbitrary non-privileged port 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print 'Socket created' 
try: 
    s.bind((HOST, PORT)) 
except socket.error , msg: 
    print 'Bind failed. Error code: ' + str(msg[0]) + 'Error message: ' + msg[1] 
    sys.exit() 
print 'Socket bind complete' 


    def listen(): 
     s.listen(1) 
     print 'Socket now listening' 

     # Accept the connection 
     (conn, addr) = s.accept() 
     print 'Server: got connection from client ' + addr[0] + ':' + str(addr[1]) 

     while 1: 
      data = conn.recv(1024) 
      tokens = data.split(' ', 1) 
      command = tokens[0].strip() 

      print command 

      # Send reply 
      conn.send("Ack") 
      break 

     conn.close() 
     # s.close() 
     listen() 
     print "connection closed" 

    listen() 

Java Client:

public class Client { 

    public static void main(String... args) throws Exception { 
     int portNum = 11113; 

     Socket socket; 

     socket = new Socket("192.168.1.20", portNum); 


     DataOutputStream dout=new DataOutputStream(socket.getOutputStream()); 
     dout.writeUTF("Hello"); 
     dout.flush(); 
     dout.close(); 
     socket.close(); 


    } 
} 

Python Server startet ok und wartet auf eine Verbindung, wenn ich den Client ausführen Code der Server gibt die hello Text gefolgt von einer Menge Leerzeichen und dann

bearbeiten: der Leerraum ist, dass while 1 Schleife ou die ankommenden Daten ansprechen und dann außer Kontrolle geraten, bis sie abstürzt. Ich möchte den Text ausgeben und für weitere Verbindungen auflisten.

edit 2: behoben Python, so dass es nicht abstürzt - ich lasse die Schleife und den Hörprozess neu starten - was funktioniert. Wenn dieses Skript verbessert werden kann, bitte lmk - es sieht nicht so aus, als würde es skalieren.

Antwort

1

errno.32 ist: Unterbrochenes Rohr (die Rohrbruch Fehler tritt auf, wenn ein Ende der TCP-Socket-Verbindung (mit disconnect schließt) oder getötet wird und der andere

In Java-Client, senden Sie einige Daten und die Buchse schließen Sie sofort, welche die result.I vertraut ist hier nicht mit java.But verursachen kann, sind zwei Dinge unter Sie folgen müssen.

1.remove sock.close() in Java-Client.

2.Make Ihr Java-Client für eine Weile schlafen, aber beenden Sie.

+0

danke - ich denke, ich habe es funktioniert und veröffentlichte das bearbeitete Skript -, ich werde dies als die Antwort markieren. – bsautner

Verwandte Themen