在 python 中通过 TCP 服务器网络发送对象
Sending an object over a TCP server network in python
我目前正在开展一个小项目,在 python 的不同地区进行试验。我决定在 python 中制作一个多客户端 TCP 服务器,并希望能够通过服务器发送一个 "packet",它被其他客户端接收然后解析。但是,如果我尝试发送数据包,我会得到一个错误,说我必须发送字节或字符串,有没有办法将对象转换为字节,然后返回或通过服务器本身发送数据包对象。
## 编辑 ##
我研究过 UDP 服务器,但我不认为那是我要找的东西,我可能提供的信息太少了。我正在创建一个小型试用游戏,供我和一些朋友玩,我需要与服务器保持持续连接,因为信息将不断通过网络发送,例如位置、方向、语音、库存等,我想要一种方法将整个实体 class 转换为字节数组,然后发送它,并在收到时将其转换回实体 class 的实例。
您可以使用 pickle 将对象 serialize/deserialize 转换为字符串并返回。 https://docs.python.org/2/library/pickle.html
最简单的方法是发送(压缩?)JSON 或 msgpack 对象。
例如,使用 UDP,这可能类似于下面的代码;请注意,您可能希望重用套接字对象而不是每次都实例化一个新对象。
import socket
import msgpack
def send_object(obj=None, ip, port):
if obj:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(msgpack.dumps(obj), (ip, port))
我目前正在开展一个小项目,在 python 的不同地区进行试验。我决定在 python 中制作一个多客户端 TCP 服务器,并希望能够通过服务器发送一个 "packet",它被其他客户端接收然后解析。但是,如果我尝试发送数据包,我会得到一个错误,说我必须发送字节或字符串,有没有办法将对象转换为字节,然后返回或通过服务器本身发送数据包对象。
## 编辑 ##
我研究过 UDP 服务器,但我不认为那是我要找的东西,我可能提供的信息太少了。我正在创建一个小型试用游戏,供我和一些朋友玩,我需要与服务器保持持续连接,因为信息将不断通过网络发送,例如位置、方向、语音、库存等,我想要一种方法将整个实体 class 转换为字节数组,然后发送它,并在收到时将其转换回实体 class 的实例。
您可以使用 pickle 将对象 serialize/deserialize 转换为字符串并返回。 https://docs.python.org/2/library/pickle.html
最简单的方法是发送(压缩?)JSON 或 msgpack 对象。
例如,使用 UDP,这可能类似于下面的代码;请注意,您可能希望重用套接字对象而不是每次都实例化一个新对象。
import socket
import msgpack
def send_object(obj=None, ip, port):
if obj:
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.sendto(msgpack.dumps(obj), (ip, port))