TCP 服务器加倍输入

TCP server doubling inputs

我目前正在使用 gevent 开发一个简单的 TCP 服务器。这是当前代码:

from gevent.server import StreamServer

SIZE = 1024
DISCONNECT_INPUT = "\q"

def clientSocket(socket, address):
    print(f"[{address}] Connection established.")
    socket.send(f"Welcome to the server. Type {DISCONNECT_INPUT} to exit.".encode())

    dataList = []

    while True:
        message = socket.recv(SIZE).decode()

        if message:
            if message == DISCONNECT_INPUT:
                print(f"[{address}] Client closed connection.")
                break

            else:
                print(f"[{address}]: {message}")

                dataList.append(message)
                socket.send(message.encode())

        else:
            print(f"[{address}] Client disconnected.")
            break



server = StreamServer(("127.0.0.1", 5000), clientSocket)
print("Listnening for connections...")
server.serve_forever()

连接处理得很好,但输入是按字符而不是按行接收的。例如,如果我通过 telnet 连接并尝试键入“这是一条消息”,服务器会接收并读取我键入的每个字符,而不是等待完整的内容。为了更好地说明我的意思:

这是在 telnet 上输入“这是一条消息”后服务器的样子:

这就是 telnet window 的样子:

(服务器是回显服务器,因此 telnet 看起来像它的样子。)

我不知道究竟是什么原因造成的。这是 telnet 问题还是代码问题?

您可以使用 Wireshark 等工具检查真正发送的内容。 我认为 telnet 会尽快发送,以允许使用需要单次击键的应用程序,例如编辑器或 nethack。

TCP 是一种流协议,而不是一种消息协议,因此无法保证保留消息边界。如果要逐行回显,则必须收集直到收到 \n.