【发布时间】:2018-06-26 13:33:30
【问题描述】:
我正在尝试从我的家庭自动化控制器模拟 Belkin wemo 开关,以从亚马逊 Echo 发送语音命令。控制器支持 lua 语言。
我正在跟进file,将 UDP 数据从 Controller 的 1900 端口发送到 Echo 的 50000 端口。现在每次我发送数据时,Socket 都会使用随机端口发送数据,而不是从端口 1900 发送数据。Echo 仅在数据来自端口 1900 时才进行有效连接并回复。我从最近两天开始摸不着头脑,让工作正常但还没想通。
下面是我的代码。
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)
【问题讨论】:
-
首先,我建议您将所有
udp函数调用包装在assert中,以确保一切正常。其次,您将超时值设置为0,这意味着它每次都会超时。将其设置为正值udp:settimeout(1)或 nil 如果您希望它无限期阻止。 -
改变了 udp:settimeout(1) 的作用。现在还提出断言,我在设置套接字名称(udp:setsockname('*',1900))时收到错误消息“地址已在使用中”。如果系统正在运行,如何关闭套接字?
-
基于this你必须使用
close函数。另外,我建议您将该函数与select结合使用,以获得一个准备好读取的套接字列表和一个准备好写入的套接字列表。 -
@kingJulian “选择”功能在哪里?
-
它在链接中,但让我们把它交给chat