python中的服务器套接字不';不要打印新行

python中的服务器套接字不';不要打印新行,python,python-3.x,sockets,Python,Python 3.x,Sockets,我正在尝试简单的客户端和单一服务器,客户端发送2条消息,服务器接收2条消息。我正在打印第一个按摩打印(数据1)和第二个按摩打印(数据2),不知怎的,它在同一行打印两个按摩。你能帮忙吗 服务器 剪贴代码 TCP套接字是面向流的协议,而不是面向消息的协议 发生的情况是,在服务器从套接字读取任何内容之前,客户端最终发送了b“test1second send” 当它这样做时,它最多可以读取512个字符——足够容纳您的邮件了——同样,它最多可以读取512个字符,但此时需要读取的字符数为零,并且会打印一个空

我正在尝试简单的客户端和单一服务器,客户端发送2条消息,服务器接收2条消息。我正在打印第一个按摩打印(数据1)和第二个按摩打印(数据2),不知怎的,它在同一行打印两个按摩。你能帮忙吗

服务器 剪贴代码
TCP套接字是面向流的协议,而不是面向消息的协议

发生的情况是,在服务器从套接字读取任何内容之前,客户端最终发送了
b“test1second send”

当它这样做时,它最多可以读取512个字符——足够容纳您的邮件了——同样,它最多可以读取512个字符,但此时需要读取的字符数为零,并且会打印一个空行

根据您的实际需求,您需要找出一种方法来分隔或封装您的消息;对于文本,一个流行的选择是使用换行符(尽管如果您需要在消息中传输实际的换行符,它会让您陷入困境)


更好的选择仍然是这样的,每个消息前面都有它的长度(对于netstring,使用ASCII,但它可以是一个二进制无符号整数(4字节),或者您指定的任何形式),或者某种模式。

只想添加到这个-
数据。解码('utf-8')。拆分('\r\n\r\n',1)[1])
应该这样做吗?@Joel,只要您的read调用恰好读取了所有数据!也不能保证您已经在一个
.read()
调用中读取了整个分隔/封装的消息。当然可以,但在本例中,要解决他的POC问题,这难道不是答案吗?它不适合实际应用,但对于这个小程序,我认为他会很好。也许——直到他突然不行为止。:)我明白这并不适合所有情况,但在这种情况下,我认为这对他来说很好。然而,你的答案是对的,但我仍然认为提供一个实际的(即使是有缺陷的)解决方案(也许在答案中加入我的建议)比不提供解决方案要好:)
import socket

SERVER_IP = '0.0.0.0'
DEST_PORT = 1731

server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind((SERVER_IP,DEST_PORT))
server_socket.listen(1)
client_socket,address=server_socket.accept()


data1 = client_socket.recv(512).decode()
print(data1)
data2 = client_socket.recv(512).decode()
print(data2)

client_socket.close()
server_socket.close()
#client
import socket

HOST_IP = '127.0.0.1'
DEST_PORT = 1731

my_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

my_socket.connect((HOST_IP,DEST_PORT))

data1 = "test1"
print("client send")
my_socket.sendall(data1.encode())
my_socket.sendall("second send ".encode())

my_socket.close()