# wsock.udp.client 库模块帮助文档

## wsock.udp.client 成员列表 <a id="wsock.udp.client" href="#wsock.udp.client">&#x23;</a>

UDP 客户端

### wsock.udp.client.getLocalIp() <a id="wsock.udp.client.getLocalIp" href="#wsock.udp.client.getLocalIp">&#x23;</a>
获取联网的网卡 IP，未连接网络时返回 null。  
此函数不会发送数据也不需要建立真正的连接。

### wsock.udp.client.testBindPort(port,ip) <a id="wsock.udp.client.testBindPort" href="#wsock.udp.client.testBindPort">&#x23;</a>
检查参数指定的端口号是否空闲  
如果不写IP，则默认设为"0.0.0.0"

## udpClientObject 成员列表 <a id="udpClientObject" href="#udpClientObject">&#x23;</a>

### udpClientObject.asyncSelect(event,userMsgId,hwnd) <a id="udpClientObject.asyncSelect" href="#udpClientObject.asyncSelect">&#x23;</a>
检测到由event参数指明的网络事件后,  
事件到达向hwnd指定句柄的窗口发送userMsgId消息,  
第二次调用此函数可省略句柄以及消息ID  

失败返回null,以及错误信息,  
成功返回true,以及上次调用此函数指定的event参数

### udpClientObject.bind <a id="udpClientObject.bind" href="#udpClientObject.bind">&#x23;</a>
绑定 IP 端口。

### udpClientObject.bind(IP,port) <a id="udpClientObject.bind" href="#udpClientObject.bind">&#x23;</a>
绑定 IP 端口。  
如果不指定 @IP 则默认获取内网 IP 作为参数。  

参数 @port 可指定数值或数组，指定数组则尝试连接数组中的所有端口。  

指定单个端口时成功返回 true，端口参数为数组时返回连接成功的**端口参数**。  
失败返回 null,错误信息,错误代码。  
相同的本地 IP 与端口重复绑定会返回 10022（_WSAEINVAL） 错误。  
绑定成功后不能再重复调用此函数。

### udpClientObject.close() <a id="udpClientObject.close" href="#udpClientObject.close">&#x23;</a>
关闭 UDP 客户端。  
如果套接字由其他线程创建则此函数仅关闭对象，  
否则会关闭套接字，已关闭的套接字不能再使用。  

如果未显式调用此函数，在对象析构时,将会自动调用。

### udpClientObject.connect(IP或域名,端口号) <a id="udpClientObject.connect" href="#udpClientObject.connect">&#x23;</a>
连接指定的目标 IP 以及端口号。  
省略参数则使用此对象上次使用的目标地址。

### udpClientObject.getLocalIp() <a id="udpClientObject.getLocalIp" href="#udpClientObject.getLocalIp">&#x23;</a>
返回本机 IP，端口。

### udpClientObject.getRemoteAddress() <a id="udpClientObject.getRemoteAddress" href="#udpClientObject.getRemoteAddress">&#x23;</a>
最后发送或接收的 sockaddr_in 结构体  

[返回对象:sockaddrInObject](#sockaddrInObject)

### udpClientObject.getRemoteIp() <a id="udpClientObject.getRemoteIp" href="#udpClientObject.getRemoteIp">&#x23;</a>
返回最后发送或接收的 IP ,端口

### udpClientObject.getopt(_SO) <a id="udpClientObject.getopt" href="#udpClientObject.getopt">&#x23;</a>
获取选项  
参数 @1 使用_SO_前缀的常量指定选项,参数 @2 使用结构体指定值  
如果不指定参数 @2 ,则获取一个32位整型数值,  
可选用参数@3指定设置层次，默认为SOL_SOCKET  
成功返回读取的结构体

### udpClientObject.joinGroup(广播组IP地址,网络接口IP) <a id="udpClientObject.joinGroup" href="#udpClientObject.joinGroup">&#x23;</a>
加入广播组  
参数 @2 可省略

### udpClientObject.leaveGroup(广播组IP地址,网络接口IP) <a id="udpClientObject.leaveGroup" href="#udpClientObject.leaveGroup">&#x23;</a>
退出广播组  
参数 @2 可省略

### udpClientObject.recv(最大接收长度) <a id="udpClientObject.recv" href="#udpClientObject.recv">&#x23;</a>
接收数据包。  
如果参数不指定长度，则使用 bufferSize 指定的长度。  
成功返回字符串,  
失败返回 null,错误代码  

与 recvfrom 方法的区别是此函数不会接收并存储远程客户端的 IP地址与端口。

### udpClientObject.recvfrom(缓冲区长度) <a id="udpClientObject.recvfrom" href="#udpClientObject.recvfrom">&#x23;</a>
接收数据并获取远程客户端地址。  
如果获取到非空数据则返回 3 个值：数据,IP,端口 。  
此函数会更新并存储最后发送与接收的远程客户端地址。

### udpClientObject.reuseAddress(true) <a id="udpClientObject.reuseAddress" href="#udpClientObject.reuseAddress">&#x23;</a>
是否允许端口重用

### udpClientObject.send(数据,长度) <a id="udpClientObject.send" href="#udpClientObject.send">&#x23;</a>
调用 connect 以后可以使用此函数接收数据包发送数据包。  
参数 @1 可指定字符串、buffer、结构体。  
可选用参数 @2 指定发送长度，不指定则取参数 @1 的字节长度。

### udpClientObject.sendto(发送数据,IP或域名,端口号) <a id="udpClientObject.sendto" href="#udpClientObject.sendto">&#x23;</a>
发送数据（可指定字符串、buffer、结构体），IP 端口号为可选参数,  
成功返回 true

### udpClientObject.setBroadcast(true) <a id="udpClientObject.setBroadcast" href="#udpClientObject.setBroadcast">&#x23;</a>
允许广播

### udpClientObject.setMulticastInterface() <a id="udpClientObject.setMulticastInterface" href="#udpClientObject.setMulticastInterface">&#x23;</a>
设置组播网卡IP，不指定参数自动取网卡IP

### udpClientObject.setMulticastLoopback(true) <a id="udpClientObject.setMulticastLoopback" href="#udpClientObject.setMulticastLoopback">&#x23;</a>
是否启用多播回送

### udpClientObject.setMulticastTtl() <a id="udpClientObject.setMulticastTtl" href="#udpClientObject.setMulticastTtl">&#x23;</a>
设置组播报文的数据包的TTL

### udpClientObject.setTimeouts(发送超时,接收超时) <a id="udpClientObject.setTimeouts" href="#udpClientObject.setTimeouts">&#x23;</a>
设置超时，以亳秒为单位（1秒为1000毫秒）.  
不指定则恢复默认值（0）

### udpClientObject.setopt(_SO) <a id="udpClientObject.setopt" href="#udpClientObject.setopt">&#x23;</a>
设置选项  
参数 @1 使用_SO_前缀的常量指定选项,参数 @2 使用结构体、数值、布尔值都可以  
可选用参数@3指定设置层次，默认为SOL_SOCKET  
成功返回true

## wsock.udp 成员列表 <a id="wsock.udp" href="#wsock.udp">&#x23;</a>

### wsock.udp.client() <a id="wsock.udp.client" href="#wsock.udp.client">&#x23;</a>
创建 UDP 客户端。  

此对象可传入其他线程（仅共享 UDP 套接字，接收线程调用 close 方法不会关闭套接字）。  

[返回对象:udpClientObject](#udpClientObject)
