lua udp mysql_lua - UDP

UDP

socket.udp()

创建并返回一个无连接的UDP对象。该无连接对象支持以下函数:sendto、receive、receivefrom、getsockname、setoption、settimeout、setpeername、setsockname、close。其中的setpeername被用作连接对象(待解释)。

connected:close()

unconnected:close()

关闭一个UDP对象。对象使用的内部套接字被关闭,并且对象绑定的本地地址可被外部程序使用。在套接字被关闭之后,对象不再具有可用的方法。

注意:一旦套接字不再使用,就应该主动地关闭它们,并且这很重要。因为在许多系统中,每个套接字都使用一个文件句柄,而这个文件句柄都是系统的有限资源。

connected:getpeername()

获取已连接的UDP对象的信息。

返回已连接UDP对象的IP地址与端口号。

注意:不能对无连接对象使用该方法。

connected:getsockname()

unconnected:getsockname()

返回对象绑定的本地地址信息。

该方法返回一个本地IP字符串和用数字描述的端口号。若发生错误则返回nil。

注意:UDP套接字在UDP对象使用setsockname或sendto方法之前不会绑定任何地址(而在这种情况下,它将绑定一个临时的端口和0.0.0.0地址)

connected:receive([size])

unconnected:receive([size])

从UDP对象收取数据包。如果UDP对象为已连接对象,则只收取其来自其连接对象的数据包,都收取的数据包可来自任何主机。

可选参数size用于指定收取数据包的最大长度,若数据报的长度大于指定的最大收取长度,则数据报中额外的字节将被丢弃。若数据包的长度小于指定的最大收取长度,则所有的字节均被获取。若size参数缺省,则使用默认的数据包大小(目前该默认大小为8192字节)。

若receive方法执行成功,则返回收取的数据报(字符串表示)。若超时,则返回nil和"timeout"字符串。

unconnected:receivefrom([size])

与receive方法的基本相同,不同的是它还返回额外的数据报来源对象绑定的IP和端口号(因此与receive相比该方法略显低效)

connected:send(datagram)

发送数据报给已连接的UDP对象。

datagram为字符串描述的数据报文。UDP连接的最大的数据报文长度为64K减去IP报头长度。若报文的长度大于链路层允许的数据包大小,则报文会被分段发送,这会降低数据传递的效率与可靠性。

若发送成功,该方法返回1。若发送失败,则返回nil和错误描述信息。

注意:在UDP通信中,可能导致send方法失败的唯一原因是传输层拒绝发送数据到特定的IP地址(若那些没有任何硬件接口接受的IP地址)。

unconnected:sendto(datagram,ip, port)

发送数据报到指定的IP和端口上。

译注:与send不同之处仅在于该方法允许你指定接受者的IP和端口,参考send方法。

connected:setpeername('*')

unconnected:setpeername(address,port)

改变UDP对象的连接状态。该方法将一个已连接的UDP对象转换为未连接对象,反之亦可将一个未连接对象转换为已连接对象。

对于已连接的UDP对象,它发出的数据报仍被送往指定的客户端,而其从其它客户端获取的数据报将被操作系统丢弃。这一准则的前提是UDP对象使用了send和receive方法而非sendto和receivefrom。

address参数可以是IP地址也可以是主机名。port参数为端口号。若address参数为"*"并且UDP对象已建立连接,则UDP对象连接的客户端会被删除且该UDP对象被重置为未连接的UDP对象。在这一情形下,port参数被忽略。

若setpeername方法执行失败,则返回nil和错误描述信息。若执行成功,则返回1。

注意:在UDP建立连接后,便无需重复的向操作系统交换IP地址信息。因此,在想同一客户端多次传送数据时,建议使用已连接的UDP对象,这样可以获得30%的性能提升。

unconnected:setsockname(address,port)

将UDP对象绑定到本地地址。

address参数可以是IP地址或主机名。若address参数为"*",则绑定到所有本地接口。若port参数为0,则使用一个临时的端口号。

若执行成功,则返回1。若失败,则返回nil和错误描述信息。

注意:该方法只可在数据报发送之前有UDP对象调用一次。若不显式的在发送数据报之前调用此函数,则系统在发送首个数据报的同时会自动的将UDP对象绑定到所有本地接口并使用一个临时的端口号。

connected:setoption(option[, value])

unconnected:setoption(option[, value])

为UDP对象设置选项。只有低级别或时序要求严格的的程序才会需要设置选项。只有在明确需要设置选项时才应该使用此方法。

option参数为一个字符串表示的选项名,value由option参数决定:

·"dontroute":将此选项的value值设置为true表明发送的消息应绕过标准路由设备。

·"broadcast":将此选项的value值设置为true表明要求在套接字上发送的广播数据报   的权限。

若执行成功,则返回1。若失败,则返回nil和错误描述信息。

connect:settimteout(value)

unconnected:settimeout(value)

改变对象的超时值。默认情形下,receive和receivefrom方法都是阻塞的。也就是说,该方法在收到数据前将会一直阻塞。settimeout方法使用value值设置了一个最大的阻塞时间。若该时间达到时,receive或receivefrom方法仍未收到数据,则该方法执行失败并返回nil。

最大超时时间由value参数设定,单位为秒。若value为nil或负数,则阻塞时间不定(阻塞到数据到达)。

注意:在UDP通信中,send和sendto方法从不阻塞。因此settimeout方法对这两个方法无效果。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值