gpt4 book ai didi

python - 发送消息后关闭客户端套接字会导致错误

转载 作者:行者123 更新时间:2023-12-01 00:59:10 24 4
gpt4 key购买 nike

我想知道为什么关闭客户端套接字会导致错误消息(如下所示:)

Traceback (most recent call last):
File "client.py", line 39, in <module>
main()
File "client.py", line 35, in main
accept()
File "client.py", line 21, in accept
len_msg = int(msg[:headersize])
ValueError: invalid literal for int() with base 10: b''

这是服务器端

import socket 
import time
import pickle

def connect(data, headersize = 10, looped = False):

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as server:
server.bind((socket.gethostname(), 1234))

server.listen(5)

while True:

client_socket, address = server.accept()
print(f"connection with {address} has been established")
msg = pickle.dumps(data)
msg = bytes(f"{len(msg):<{headersize}}", "utf-8") + msg

client_socket.send(msg)

if looped:
while True:
msg = f"{time.time()} + the new message"
client_socket.send(msg)


client_socket.close() # this causes an error

def main():
data = {"apple":5, "pinapple":10}
connect(data)
if __name__ == "__main__":
main()

这是客户端

import socket
import time
import pickle


def accept(headersize = 10):

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as client:
client.connect((socket.gethostname(), 1234))

while True:

new_msg = True
full_msg = b""
len_msg = 0
while True:

msg = client.recv(headersize + 4)

if new_msg:
len_msg = int(msg[:headersize])
new_msg = False

full_msg += msg
if len(full_msg) - headersize == len_msg:

print(full_msg[headersize:])
d = pickle.loads(full_msg[headersize:])
print(d)
full_msg = b""
new_msg = True
def main():
accept()

if __name__ == "__main__":
main()

程序很简单:我只是以二进制形式将消息发送给客户端。当我在服务器端删除 client_socket.close() 时,没有错误 - 那么如何正确关闭客户端套接字?谢谢

最佳答案

recv 当发送套接字关闭时返回 b''

msg[:headersize]msg 为空时返回 b''

int(b'') 给出您所看到的错误。

如果套接字关闭,则以下内容将退出客户端的内部 while True: 循环,因此它不会尝试处理空消息。我没有看到外部 while True: 的目的。

msg = client.recv(headersize + 4)
if not msg: # empty strings are False
break

关于python - 发送消息后关闭客户端套接字会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55946215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com