如何通过套接字发送数组,然后获取python中的每个项目

时间:2017-10-27 18:14:22

标签: python sockets server client

下面是我的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

1 个答案:

答案 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

我希望它可以帮到你。