2015-12-09 53 views
1

我試圖從python轉換一些代碼到lua。Lua和多播

Python中的相關位:

import socket 
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) 
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
sock.settimeout(3) 
sock.bind(('239.0.3.138', 3935)) 
mreq = struct.pack("=4sl", socket.inet_aton('239.0.3.138'), socket.INADDR_ANY) 
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) 
print(sock.recv(1500)) 

我試圖在Lua做的是:

udp = socket.udp() 
udp:setpeername('239.0.3.138','3935') 
udp:settimeout(3.0) 
udp:setoption("ip-add-membership", { multiaddr="239.0.3.138", interface="*" }) 
print(udp:receive(1500)) 

我不是那種既不Lua中也沒有與網絡熟悉。我只是想學習一點。關於我錯過了什麼的任何線索?

Lua代碼正在到達超時。

+0

只是一個猜測:嘗試'udp:receivefrom()'。 –

+0

@EgorSkriptunoff可預見的微妙,讓麪包屑走上啓蒙的道路...... –

回答

0

Luasocket存儲庫有關於UDP上的sendingreceiving消息的示例。這個例子中的代碼看起來和你的代碼類似,正如Egor所建議的,它使用receivefrom。雖然由於您使用setpeername,receive也應該工作according to the documentation