下面是我的server.py和client.py。所以我想打印由新行分隔的数组中的每个项目。 Server.py:
import socket
listener = socket.socket()
listener.bind(("",12345))
listener.listen()
while 1:
conn = listener.accept()
sock = conn[0]
encoded_message = sock.recv(2048)
while len(encoded_message) > 0:
message += encoded_message.decode() + "\n"
encoded_message = sock.recv(2048)
print(message)
encoded_message = message.encode()
sock.send(encoded_message)
sock.shutdown(1)
sock.close()
client.py:
import socket
sock = socket.socket()
sock.connect(("localhost",12345))
testing_strings = ["A123 45",
"L65 78",
"E486",
"D4 1 0",
"E1.0",
"S1.0",
"S0 2 -945 1689 -950 230 -25 1 -1e-15",
"Not a number",
"S0 2 -945 1689 -950 230 -25 1 0",
"S0 2 -945 1689 -950 230 G 1 1e-15"]
for c in testing_strings:
encoded_message = c.encode()
sock.send(encoded_message)
sock.shutdown(1)
encoded_message = sock.recv(2048)
while len(encoded_message) > 0:
message += encoded_message.decode()
encoded_message = sock.recv(2048)
print(message)
sock.close()
但我总是得到
A123 45L65 78E486D4 1 0
E1.0
S1.0
S0 2 -945 1689 -950 230 -25 1 -1e-15
Not a number
S0 2 -945 1689 -950 230 -25 1 0
S0 2 -945 1689 -950 230 G 1 1e-15
看起来前三个项目总是在一起,其余的工作正常。我想将它们分开并打印每一行。我将不胜感激任何帮助。谢谢。 预期产出:
A123 45
L65 78
E486
D4 1 0
E1.0
S1.0
S0 2 -945 1689 -950 230 -25 1 -1e-15
Not a number
S0 2 -945 1689 -950 230 -25 1 0
S0 2 -945 1689 -950 230 G 1 1e-15
答案 0 :(得分:0)
每条消息的大小不同,所以我认为实现这一目标的最佳方法是使用XML,JSON等序列化进行结构化通信。
如果您不想使用序列化,则每次发送数据时都可以使用开始和结束标记或唯一符号,如管道“|”。 因此,在服务器代码中,您应该连接所有消息,最后将最终内容拆分为一个列表。
separator = "|".encode()
for c in testing_strings:
encoded_message = c.encode()
sock.send(separator)
sock.send(encoded_message)
我写了一个类似问题的答案,你可以在这里看到:
Simple Python Server Client File Transfer
我希望它可以帮到你。