sockets - luasocket 从端口 1900 发送 UDP 数据

标签 sockets lua udp luasocket

我正在尝试从我的家庭自动化 Controller 模拟 Belkin wemo 开关,以从 amazon Echo 发送语音命令。该 Controller 支持 lua 语言。

我正在跟进这个file将UDP数据从Controller的1900端口发送到Echo的50000端口。现在每次我发送数据时,Socket 都会使用随机端口发送数据,而不是从端口 1900 发送数据。如果数据来自端口 1900,Echo 只会建立有效连接并回复。过去两天我一直在摸索着做是工作但还没有弄明白。

下面是我的代码。

strData1 =
  'HTTP/1.1 200 OK' .. 
 'HOST: 239.255.255.250:1900'..
 'CACHE-CONTROL: max-age=100'..
 'EXT:'..
 'LOCATION: http://192.168.1.152:49153/description.xml'..
 'SERVER: Linux/3.14.0 UPnP/1.0 IpBridge/1.19.0'..
 'hue-bridgeid: B8AC6FFFFEC53475'..
 'ST: upnp:rootdevice'..
 'USN: uuid:2f402f80-da50-11e1-9b23-b8ac6fc53475::upnp:rootdevice'

 local socket = require "socket"
 local udp = socket.udp()

 udp:settimeout(0)
 udp:setsockname('*', 1900)
 udp:setpeername('192.168.1.102', 50000) -- Echo IP and Port number
 udp:sendto(strData1,'192.168.1.102',50000)

最佳答案

您快到了:documentation声明在使用 setpeername 时,必须使用 send 而不是 sendto

此外,我猜这是一个拼写错误,但您正在尝试发送 Data 而不是 strData1。这是更正后的版本:

strData1 =
  'HTTP/1.1 200 OK' .. 
 'HOST: 239.255.255.250:1900'..
 'CACHE-CONTROL: max-age=100'..
 'EXT:'..
 'LOCATION: http://192.168.1.152:49153/description.xml'..
 'SERVER: Linux/3.14.0 UPnP/1.0 IpBridge/1.19.0'..
 'hue-bridgeid: B8AC6FFFFEC53475'..
 'ST: upnp:rootdevice'..
 'USN: uuid:2f402f80-da50-11e1-9b23-b8ac6fc53475::upnp:rootdevice'

 local socket = require "socket"
 local udp = socket.udp()

 udp:settimeout(0)
 udp:setoption('reuseaddr',true)
 udp:setsockname('*', 1900)
 udp:setpeername('192.168.1.102', 50000) -- Echo IP and Port number
 udp:send(strData1)

tcpdump的抓包显示源端口是正确的:

22:40:45.653222 IP my.super.secret.ip.1900 > 192.168.1.102.50000: UDP, 长度 280

关于sockets - luasocket 从端口 1900 发送 UDP 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48305020/

相关文章:

vim - 如何封装Lua/Python/Ruby编写的Vim插件代码?

c - 为什么对 sendto() 的调用失败了?

java - 如何修复 SSL - 没有可用的证书

Java "NotSerializableException: java.net.Socket"不发送套接字时

java - 客户端从服务器读取太多字节?

android - 如何在 Corona SDK 中隐藏处于碰撞前事件状态的对象?

php - PHP Curl,错误: Browser must support session cookies?

c++ - 在lua中覆盖c++方法并在c++中调用它

java - 如何在 android 的异步函数中连续接收 UDP?

c - 如何连接到 c 中的 bit torrent tracker