Python 如何使用这些规则实现自定义二进制协议?

Python 如何使用这些规则实现自定义二进制协议?,python,sockets,struct,binary-data,Python,Sockets,Struct,Binary Data,我正在尝试将二进制数据发送到服务器,服务器会在执行此操作时返回响应。对于熟悉python的人来说,这些规则似乎是可以理解的,但我对使用struct进行python和socket编程还不熟悉。因此,文件规定: 有一个8字节的报头,其中请求标记为32位整数,命令为32位整数。类型为uint32。缓冲区大小取决于命令的类型 有些命令采用参数,并与命令消息头一起发送,直接在头之后发送,不带任何填充。参数缓冲区的大小由命令类型决定 所以我连接到服务器,现在我尝试将其打包成值,然后像那样发送,但我不知道我是

我正在尝试将二进制数据发送到服务器,服务器会在执行此操作时返回响应。对于熟悉python的人来说,这些规则似乎是可以理解的,但我对使用struct进行python和socket编程还不熟悉。因此,文件规定:

有一个8字节的报头,其中请求标记为32位整数,命令为32位整数。类型为uint32。缓冲区大小取决于命令的类型

有些命令采用参数,并与命令消息头一起发送,直接在头之后发送,不带任何填充。参数缓冲区的大小由命令类型决定

所以我连接到服务器,现在我尝试将其打包成值,然后像那样发送,但我不知道我是否做对了

导入套接字
导入结构
#创建TCP/IP套接字
从protlib导入hextump
sock=socket.socket(socket.AF\u INET,socket.sock\u流)
服务器地址=('localhost',4200)
sock.connect(服务器地址)
值=(23,42)
packer=struct.struct('i')
打包数据=打包机打包(*值)
#发送数据
sock.sendall(打包数据)
尽管如此:
原始数据=sock.recv(1024)
解包数据=结构解包('>i',原始数据)
打印(未打包的数据)
sock.close()

如果有人能给我指出正确的方向并提供一些指导,我将阅读更多相关内容。

好的,因此我发现了错误,并能够通过服务器获得我想要的响应。这个错误是错误的

packer=struct.struct('i')//需要将其格式化为('!i'))

及 原始数据=sock.recv(1024) unpacket_data=struct.unpack('>i',raw_data)//需要添加!不是> 打印(未打包的数据) sock.close()

我还写了一个简单的解包,帮助我以正确的方式解包

def数据_解包(数据): 标记,代码=struct.unpack(“!ii”,数据[:8]) 返回标记、代码、数据[8:]


然后用参数raw_data调用main中的函数

将self导入为self
?您正在打包2个整数,即8字节。那是头球。现在你还必须打包数据,但是如果不知道协议,很难判断。是的,你有一点让我补充更多关于协议的信息。补充更多关于协议的信息。但我想发送的命令ID也是1.2美分。如果你真的要走这条路,你会想用“谢谢”,我会调查的