Python socket errno 32破管

时间:2017-10-02 20:26:28

标签: python sockets

我试图通过python通过TCP / IP发送消息,第一条消息已经收到但是当我尝试发送另一条消息时它返回:“socket error32 broken pipe”

我的代码:

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

我尝试搜索此问题,但我找不到解决方案,当我尝试发送第二条消息时套接字仍处于打开状态。 有人有解决方案吗?

1 个答案:

答案 0 :(得分:0)

可能 SIGPIPE 错误:

  

您的服务器进程已收到写入套接字的SIGPIPE。这个   通常在写入另一个完全关闭的套接字时发生   (客户端。当客户端程序没有时,可能会发生这种情况   等到收到服务器的所有数据,然后关闭a   socket(使用close函数)。

     

在C程序中,您通常会尝试设置忽略SIGPIPE信号   或者为它设置一个虚拟信号处理程序。在这种情况下一个简单的错误   写入已关闭的套接字时将返回。在你的情况下   python似乎抛出了一个可以作为过早处理的异常   断开客户端。

How to prevent errno 32 broken pipe?

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