2016-01-21 52 views
0

我需要建立一個網絡來將一個numpy陣列從主機傳輸到客戶端計算機。這可以儘可能簡單,除了我必須使用16位整數。我做對了嗎?我應該使用更好的函數/命令嗎? (Win7,64位,Python 2.7)到目前爲止,它似乎工作,但我是一個網絡總noobot,我還沒有找到一個體面的教程,解釋如何所有這些適合在一起。 (請建議一個)謝謝!Python - 在以太網數據包中發送/接收一個numpy陣列

server.py

import socket, time, numpy as np 
myDict = {1:1, 2:2, 3:3} 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1) 
while 1: 
    data = np.array(myDict.values(), dtype = np.int16).flatten() 
    s.sendto(data, ('<broadcast>',5252)) 
    time.sleep(1) 

client.py

import socket, numpy as np 
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
s.bind(('', 5252)) 
data = np.empty((1,6), dtype = np.int16) 
s.recv_into(data) 
print data 

回答

0

您正在使用數據報套接字(UDP)來傳輸數據。 UDP是盡力而爲的服務,並且不保證您發送的每個數據報都將在遠端傳送。

另一種方法是使用TCP,但是您需要在通過套接字發送它之前序列化您的numpy數據,然後在您收到它時將其反序列化。

如果你使用不可靠的UDP傳輸很好,那麼你現在正在做的是OK。

編輯:當使用廣播 - 你基本上發送相同的數據片段到你的直接連接的網絡中的所有設備。任何偵聽UDP端口5252的設備都將能夠接收您發送的數據。

+0

謝謝。數據包的生產接收者本質上是一個愚蠢的網絡監視器,所以我認爲我受限於播放UDP(我剛剛意識到這不是上面的代碼正在做什麼......) – DanGoodrick

+0

我用替換了IP地址,它仍然作品。 < and >做什麼工作?另外,廣播時指定的端口是否重要? – DanGoodrick

相關問題