无法使用TCP套接字python在服务器上接收多条消息

Cant receive multiple messages on server using TCP socket pyton

我是套接字的新手,并不知道如何从同一个客户端接收多条消息。我只收到第一条消息,其余的都没有。

服务器代码:

import socket

IP = "127.0.0.1"
PORT = 65432

server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((IP, PORT))

server.listen()

while True:
    communication_socket, address = server.accept()
    msg = communication_socket.recv(1024).decode("utf-8")
    print(msg)

客户代码:

import socket
import time

HOST = "127.0.0.1"
PORT = 65432

socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((HOST, PORT))

socket.send("success".encode("utf-8"))
time.sleep(2)
socket.send("?".encode("utf-8"))
socket.close()
communication_socket, address = server.accept()
msg = communication_socket.recv(1024).decode("utf-8")

当前代码接受新连接,然后执行单个 recv。这就是它只获取第一个数据的原因。你需要的是多个 recv here after accept.

... multiple messages from the same client

TCP没有消息的概念。它只是一个字节流。 sendrecv 之间没有保证的 1:1 关系,即使在许多情况下它可能看起来像这样。因此,消息语义必须是应用程序协议的显式部分,例如用新行分隔消息,只有固定大小的消息或类似内容。