簡體   English   中英

使用 Python 發送 UDP 數據報

[英]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]

檢查dtypedata_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM