python - 使用 Python 发送 UDP 数据报
问题描述
我想使用套接字 API 通过 udp 发送数据请求。请求的格式如下:
ID | Data_Length | Data
该请求包含以下参数:标识符(ID),(Data_Length)是(Data)的大小,(Data)是要发送的数据,(Data)具有可变大小。
我写的代码如下:
def send_request():
request_format="bbs" # 1 Byte for the ID 1 Byte for Data_Length and s for data
data_buff=np.array([1,2,3,4,5,6,7,8,9]) # Data to be sent
msg = struct.pack(request_format,0x01,0x09,data_buff.tobytes())
print("msg = ", msg)
s0.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s0.sendto(msg, (UDP_BC_IP, UDP_SERVER_PORT))
我的问题:
1-使用 Wireshark 我可以看到只发送了第一个数据字节,为什么?
2-打印指令的输出是msg = b'\x01\t\x01'
为什么我得到这个输出,我在等待类似的东西[0x01,0x09,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09]
解决方案
检查dtype
-data_buff
除非int64
你使用:
data_buff = np.array([1,2,3,4,5,6,7,8,9], dtype=np.uint8)
s
然后根据数组的大小重复你的说明符:
request_format="bb" + str(data_buff.size) + "s"
现在您可以打包:
msg = struct.pack(request_format,0x01,0x09,data_buff.tobytes())
您的消息将如下所示:
b'\x01\t\x01\x02\x03\x04\x05\x06\x07\x08\t'
TAB 字符是 ASCII 代码 9,因此您将看到\t
数据在哪里 9。
推荐阅读
- react-native - 不变违规:不变违规:outputRange 不能包含#ffffff。(#ffffff,#aaa2d7,#aaa2d7)
- powershell - PowerShell区分大小写的字母字符顺序?
- android - 使用recyclerview android从firebase中删除
- c++ - std::map 上的自定义 omp 减少
- python - 我需要从当前日期加上 7 天减去一个基准日期;但不确定如何计算年份的变化?
- azure-devops - 我们是否能够跟踪 Azure DevOps 对象的老化,例如错误和任务?
- c++ - VTK 以奇怪的方式与 vtkassembly 混合颜色
- mysql - 从 VBA 调用时,MySql 查询需要很长时间才能执行
- service-worker - 更改预缓存 URL/Service Worker 范围
- java - 如何将用户的输入与对象的属性进行比较并获取该对象?