2017-10-02 1 views
1

Ich versuche, eine Nachricht über TCP/IP über Python zu senden, hat die erste Nachricht empfangen, aber wenn ich versuche, ein anderes schicken Sie es zurück: „socket Error32 Rohrbruch“Python-Buchse errno 32 gebrochenes Rohr

mein Code:

import socket 
from RPi import GPIO 
from time import sleep 

TCP_IP = '192.168.178.29' 
TCP_PORT = 45335 
BUFFER_SIZE = 1024 
MESSAGE = "Hello, World!" 

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
s.connect((TCP_IP, TCP_PORT)) 

clk = 17 
dt = 18 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(clk, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 
GPIO.setup(dt, GPIO.IN, pull_up_down=GPIO.PUD_DOWN) 

counter = 0 
clkLastState = GPIO.input(clk) 

try: 
     while True: 
      clkState = GPIO.input(clk) 
      dtState = GPIO.input(dt) 
      if clkState != clkLastState: 
        if dtState != clkState: 
          counter += 1 
        else: 
          counter -= 1 
        s.send(str(counter)) 
        print counter 
      clkLastState = clkState 
      sleep(0.01) 
finally: 
    GPIO.cleanup() 

ich für dieses Problem versucht, die Suche, aber ich konnte keine Lösung finden, ist die Buchse noch offen, wenn ich versuche, die zweite Nachricht zu senden. Hat jemand eine Lösung dafür?

+0

Die andere Seite hat die Verbindung geschlossen, vielleicht? Haben Sie einen Schnüffler benutzt, um sich den Verkehr anzusehen? –

+0

Ja, ich habe Paketsender benutzt –

Antwort

0

vielleicht SIGPIPE Fehler:

Ihr Server-Prozess eine SIGPIPE Schreiben an eine Steckdose empfangen hat. Diese passiert in der Regel, wenn Sie auf der anderen (Client) -Seite in einen Sockel schreiben, der vollständig geschlossen ist. Dies kann passieren, wenn ein Client-Programm nicht wartet, bis alle Daten vom Server empfangen werden und schließt einfach einen -Socket (mit der Close-Funktion).

In einem C-Programm würden Sie normalerweise versuchen, das SIGPIPE-Signal zu ignorieren oder einen Dummy-Signal-Handler dafür einzustellen. In diesem Fall wird beim Schreiben in einen geschlossenen Socket ein einfacher Fehler zurückgegeben. In Ihrem Fall scheint eine Python eine Ausnahme zu werfen, die als vorzeitige Trennung des Clients behandelt werden kann.

How to prevent errno 32 broken pipe?

How to handle a broken pipe (SIGPIPE) in python?

Verwandte Themen