errno 32 broken pipe while using a sendall

问题描述 投票:0回答:0

我正在尝试制作一个客户端-服务器程序。我有一个客户端、一个服务器和一个处理连接以及从服务器 (client_connect) 发送和接收消息的类。 这是我的客户:

from client_connect import *

HOST = "localhost"
PORT = 9999

cc = client_connect(HOST,PORT)

while True:
    msg = input("msg: ")
    msgRecv = cc.sendList(msg)
    print(msgRecv)

这是我的客户连接

import socket as s
import pickle as p
import struct as st

class client_connect:
    def __init__(self, adr, port):
        self.adr = adr
        self.port = port
        self.socket = s.socket(s.AF_INET, s.SOCK_STREAM)
        self.socket.connect((self.adr, self.port))

    def sendList(self, msg):
        list = ['10', msg]

        msg_bytes = p.dumps(list)
        msg_size_bytes = st.pack('i',len(msg_bytes))
        self.socket.sendall(msg_size_bytes)
        self.socket.sendall(msg_bytes)

        resp_size_bytes = self.socket.recv(4)
        resp_size = st.unpack('i',resp_size_bytes)[0]
        resp_bytes = self.socket.recv(resp_size)
        resp = p.loads(resp_bytes)
        return resp

最后是我的服务器:

import socketserver as ss
import struct as st
import pickle as p

class MyHandler(ss.BaseRequestHandler):
    def handle(self):
        req_size_bytes = self.request.recv(4)
        req_size = st.unpack('i',req_size_bytes)[0]
        req_bytes = self.request.recv(req_size)
        req = p.loads(req_bytes)

        req = ['11', "ok"]

        resp_bytes = p.dumps(req)
        resp_size_bytes = st.pack('i',len(resp_bytes))
        self.request.sendall(resp_size_bytes)
        self.request.sendall(resp_bytes)

HOST = "localhost"
PORT = 9999

server = ss.ThreadingTCPServer((HOST, PORT), MyHandler)
server.serve_forever()

循环的第一次迭代没有问题,但是当我输入第二条消息时,它给了我错误

BrokenPipeError: [Errno 32] Broken pipe
我也想使用相同的客户端套接字和所有消息的连接发送这就是我的原因在
while True:
循环之前创建客户端套接字和 socket.connect() 。我不知道为什么它会在第二条消息发送时给我一个错误。 谢谢帮助

python tcpserver socketserver
© www.soinside.com 2019 - 2024. All rights reserved.