一段时间后出现管道损坏错误

时间:2021-02-18 18:45:48

标签: python sockets raspberry-pi broken-pipe

我在运行使用超声波传感器记录距离的代码时遇到了一些问题。

如何解决这个问题 代码在这里: 服务器端:

import socket
import time


class SensorStreamingTest(object):
    def __init__(self, host, port):

        self.server_socket = socket.socket()
        self.server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        self.server_socket.bind((host, port))
        self.server_socket.listen(0)
        self.connection, self.client_address = self.server_socket.accept()
        self.host_name = socket.gethostname()
        self.host_ip = socket.gethostbyname(self.host_name)
        self.streaming()

    def streaming(self):

        try:
            print("Host: ", self.host_name + ' ' + self.host_ip)
            print("Connection from: ", self.client_address)
            start = time.time()
            #print("hi")

            while True:
                sensor_data = self.connection.recv(1024)
                
                #print (sensor_data.decode('utf-8'))
                #print("hi")
                print("Distance: %0.1f cm" , sensor_data.decode('utf-8'))

                # test for 10 seconds
                if time.time() - start > 10:
                    break
        
        finally:
            self.connection.close()
            self.server_socket.close()


if __name__ == '__main__':
    h, p = "192.168.29.77", 9000
    SensorStreamingTest(h, p)```

#客户端:

from socket import *
import time
import RPi.GPIO as GPIO


GPIO.setwarnings(False)

create a socket and bind socket to the host
client_socket = socket(AF_INET, SOCK_STREAM)
client_socket.connect(('192.168.29.77', 9000))

def measure():
    
    GPIO.output(GPIO_TRIGGER, True)
    time.sleep(0.00001)
    GPIO.output(GPIO_TRIGGER, False)
    start = time.time()

    while GPIO.input(GPIO_ECHO)==0:
        start = time.time()

    while GPIO.input(GPIO_ECHO)==1:
        stop = time.time()

    elapsed = stop-start
    distance = (elapsed * 34300)/2

    return distance


GPIO.setmode(GPIO.BCM)


GPIO_TRIGGER = 23
GPIO_ECHO    = 24


GPIO.setup(GPIO_TRIGGER,GPIO.OUT)

GPIO.setup(GPIO_ECHO,GPIO.IN)

GPIO.output(GPIO_TRIGGER, False)

try:
    while True:
        print('hi')
        distance = measure()
        
        
        
        client_socket.send(str(distance).encode('utf-8'))
        time.sleep(0.5)
finally:
    client_socket.close()
    GPIO.cleanup()```

在 0.5 秒的间隔内接收 20 个距离后,我收到了管道损坏错误并且执行停止。 不知道出了什么问题,但我不断收到损坏的管道错误, 请帮忙 谢谢

0 个答案:

没有答案