【问题标题】:Cant receive multiple messages on server using TCP socket pyton无法使用TCP套接字python在服务器上接收多条消息
【发布时间】:2023-04-09 01:26:02
【问题描述】:

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

服务器代码:

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()

【问题讨论】:

    标签: python-3.x sockets server client


    【解决方案1】:
    communication_socket, address = server.accept()
    msg = communication_socket.recv(1024).decode("utf-8")
    

    当前代码接受新连接,然后执行单个recv。这就是为什么它只获取第一个数据。你需要的是多个recv在这里接受之后。

    ...来自同一个客户端的多条消息

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

    【讨论】:

    • 如何做到这一点?
    • 我想要一个接收无限消息的服务器
    • @JorisFort:“如何做到这一点?” - 我不确定 “你需要的哪一部分...多个recv ...之后接受” 不清楚。
    • 我已经修好了谢谢你的回复:)
    猜你喜欢
    • 2021-08-06
    • 1970-01-01
    • 2016-02-28
    • 2021-03-30
    • 1970-01-01
    • 2019-10-01
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多