我有一个数组,像这样 ([1,2,3,4,5,6],[1,2,3,4,5,6])
,我需要在Python中通过STREAM/TCP套接字发送它,然后在接收端接收相同的数组。
我有一个数组,像这样 ([1,2,3,4,5,6],[1,2,3,4,5,6])
,我需要在Python中通过STREAM/TCP套接字发送它,然后在接收端接收相同的数组。
套接字是字节流,因此最好编写您自己的协议(请阅读这篇文章)。
以下是一个简单的例子,没有协议,您应该关注缓冲区大小 -> recv()。如果它太小,您的数据将被截断。这就是为什么如果您发送未知大小的数据,应该实现一个协议。
客户端:
import socket, pickle
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((HOST, PORT))
arr = ([1,2,3,4,5,6],[1,2,3,4,5,6])
data_string = pickle.dumps(arr)
s.send(data_string)
data = s.recv(4096)
data_arr = pickle.loads(data)
s.close()
print 'Received', repr(data_arr)
服务器:
import socket
HOST = 'localhost'
PORT = 50007
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((HOST, PORT))
s.listen(1)
conn, addr = s.accept()
print 'Connected by', addr
while 1:
data = conn.recv(4096)
if not data: break
conn.send(data)
conn.close()
import json
...
arr1 = [1,2,3]
arr2 = [4,5,6]
someVar = 7
data = json.dumps({"a": arr1, "b": arr2, "c": someVar})
socket.send(data.encode())
服务器:
import json
...
data = socket.recv(1024)
data = json.loads(data.decode())
arr = data.get("a")
var = data.get("c")
在这里,我们对json字符串进行反序列化,使用data.get("a")
,你可以将其解释为data.a
例如,客户端:
for item in myArray:
print("item: ", item)
myArrayString= myArrayString+ str(item) + "Δ"
print(myArrayString)
myServer.send((myArrayString).encode())
files = myconnection.recv(50000)
files = files.decode()
myArray = files.split('Δ')
for myItem in myArray:
print(myItem)
print("End Of Items in Array")