簡體   English   中英

從客戶端讀取來自 GNU Radio UDP 接收器的信號

[英]Reading signal from GNU Radio UDP sink from client side

老實說,我有點困惑,我想這個錯誤很明顯。 反正。

因此,一方面,我有一個來自 GNU Radio 的 UDP 接收器將數據發送到 Python 客戶端。

問題是我收到的數據沒有多大意義(如果我從文件接收器讀取數據,我能夠正確讀取數據,所以它與我做網絡部分的方式有關)。

我已經嘗試過小端和大端,以防萬一,我仍然會得到垃圾。

因此,在接收端(服務器端),塊配置是:

self.blocks_udp_sink_0 = blocks.udp_sink(gr.sizeof_gr_complex*1, "the_ip",8080,1472,True)

所以,另一方面,我會得到 1500 個字節,不是嗎? 1472 的有效載荷 +28 的 UDP header。

我所做的,基於this [1] example似乎沒問題,正在客戶端讀取1500字節並假設header是通過recvfrom方法取出的:

data_tmp, addr = sock.recvfrom(1500)

我假設 data_tmp 應該是 1472 字節的數據,至少長度匹配)。

當我發送 gr_complex 時,我讀取了 8 個字節(兩個浮點小端序,一個用於 I,一個用於 Q 組件)。

那么,我錯過了什么?

謝謝!!

[1] 還有很多類似的,關鍵是我假設該方法將 header 從有效負載中分離出來。 https://www.binarytides.com/programming-udp-sockets-in-python/

當您從套接字讀取時, UDP header 已被刪除,因此您不應嘗試讀取 1500 字節而是 1472。

除此之外,這看起來不錯。

我通常建議不要使用 UDP (您必須自己處理數據包丟失,甚至可能是 L2 碎片等),但是其中一個 ZeroMQ 接收器(PUSH Socket 在這里是個好主意)和您最喜歡的 Python ZeroMQ 庫( pyzmq) 作為另一端(PULL 套接字); 您將通過 TCP 獲得低開銷的數據傳輸接口(如果您需要通過網絡傳輸 go)、IPC(如果您的 GNU Radio 流程圖和接收程序可以使用 Unix 進程間通信)或一對“專家”傳輸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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