我正在尝试制作一个客户端-服务器程序。我有一个客户端、一个服务器和一个处理连接以及从服务器 (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() 。我不知道为什么它会在第二条消息发送时给我一个错误。
谢谢帮助