У меня есть файл myserver.py, который прослушивает соединения.
import socket
HEADERSIZE = 10 # constant header size
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((socket.gethostname(), 1240))
s.listen(5)
Если что-либо принято, оно отправляет обратно сообщение. Сообщение состоит из байтов строки (Письменное сообщение), закодированной с помощью utf-8, а также включает заголовок буфера со значением 10.
while True:
clientsocket, address = s.accept()
print(address)
msg = "Welcome to the server!"
msg = f"{len(msg):<{HEADERSIZE}}" + msg
clientsocket.send(bytes("Welcome to the server!", "utf-8"))
myserver.py не выдает никаких ошибок.
Мой второй файл - это «клиент», который подключается к myserver.py. Этот файл называется client.py.
import socket
HEADERSIZE = 10
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((socket.gethostname(), 1240))
while True:
full_msg = ""
new_msg = True
while True:
msg = s.recv(16) # This is the message that myserver.py sends. 16 is the buffer size.
if new_msg:
print(f'New message length: {msg[:HEADERSIZE]}')
msglen = int(msg[:HEADERSIZE])
new_msg = False
full_msg += msg.decode("utf-8")
if len(full_msg) - HEADERSIZE == msglen:
print("full msg recvd")
print(full_msg[HEADERSIZE:])
new_msg = True
full_msg = ""
print(full_msg)
Когда я пытаюсь запустить client.py, он возвращается с
Traceback (most recent call last):
File "client.py", line 17, in <module>
msglen = int(msg[:HEADERSIZE])
ValueError: invalid literal for int() with base 10: b'Welcome to'
Это похоже на то, что сообщение не буферизируется и вместо этого пытается отправить все сразу. Я не знаю, что здесь происходит.