Python socket - недопустимый литерал для int () с base10: - PullRequest
0 голосов
/ 24 января 2020

У меня есть файл 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'

Это похоже на то, что сообщение не буферизируется и вместо этого пытается отправить все сразу. Я не знаю, что здесь происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...