[英]Send and receive IPv6 link-local multicast UDP datagrams in Python?
[英]Send UDP Datagrams using Python
我想使用套接字 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 我可以看到只發送了第 1 個數據字節,為什么?
2- 打印指令的輸出是msg = b'\\x01\\t\\x01'
為什么我得到這個輸出,我在等待類似於[0x01,0x09,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09]
東西[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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.