簡體   English   中英

Python socket errno 32 斷管

[英]Python socket errno 32 broken pipe

我正在嘗試通過 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()

我嘗試搜索此問題,但找不到解決方案,當我嘗試發送第二條消息時,套接字仍然打開。 有人對此有解決方案嗎?

也許是 SIGPIPE錯誤:

您的服務器進程已收到寫入套接字的 SIGPIPE。 當您寫入在另一端(客戶端)完全關閉的套接字時,通常會發生這種情況。 當客戶端程序不等到從服務器接收到所有數據並簡單地關閉套接字(使用關閉函數)時,可能會發生這種情況。

在 C 程序中,您通常會嘗試設置忽略 SIGPIPE 信號或為其設置虛擬信號處理程序。 在這種情況下,寫入關閉的套接字時將返回一個簡單的錯誤。 在您的情況下,python 似乎拋出了一個異常,可以作為客戶端過早斷開連接來處理。

如何防止errno 32 斷管?

如何在 python 中處理損壞的管道(SIGPIPE)?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM