luasocket 从端口 1900 发送 UDP 数据
luasocket send UDP data from port 1900
我正在尝试从我的家庭自动化控制器模拟 Belkin wemo 开关以从亚马逊发送语音命令Echo.The控制器支持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, length 280
我正在尝试从我的家庭自动化控制器模拟 Belkin wemo 开关以从亚马逊发送语音命令Echo.The控制器支持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, length 280