• 创建UDP服务器

为了使用Node.js创建UDP服务器,首先要调用require('dgram')
加载dgram模块。
调用dgram模块中的createSocket()方法来创建一个UDP服务器。
这个方法接收一个必需参数和一个可选参数,必需参数是一个表示UDP
协议的类型,可指定为udp4或者udp6,代码如下:

/*引入dgram模块*/
var dgram = re?uire('dgram');
/*创建UDP服务器*/
var socket = dgram.createSocket('udp4');

这个方法中的可选参数为一个回调函数,是UDP服务器接收数据时
触发的回调函数,可接收两个参数,一个为接收到的数据,另一个为
存放发送者信息的对象,代码如下:

JavaScript udp客户端 js发送udp_JavaScript udp客户端

rinfo对象的属性及属性值如下:
address:表示发送者地址。
family:表示发送者使用的地址为ipv4或者ipv6。
port:表示发送者的端口号。
size:表示发送者发送数据的字节数大小。
创建完一个socket端口对象后还需要绑定一个端口号才能创建UDP
服务器,可利用socket.bind()方法绑定一个端口号。这个方法接收一
个必需参数、两个可选参数。必需参数为需要绑定的端口号,两个可
选参数为地址和回调函数,代码如下:
【代码6-17】 

JavaScript udp客户端 js发送udp_服务器_02

这是一个简单的UDP服务器,与net和http方法类似,因为
createSocket方法返回的是一个socket对象。一个socket对象主要有
以下事件:
message:接收数据时触发。
listening:开始监听数据报文时触发。
close:关闭socket时触发。
error:发生错误时触发。
显然上文中调用createSocket()方法中的回调函数就是监听
message事件,因此调用createSocket()方法时可以不指定回调函数,
直接显式监听message事件,同样可以达到相应的效果:

【代码6-18】

JavaScript udp客户端 js发送udp_服务器_03

 

将事件综合使用,代码如下所示:
【代码6-19】

JavaScript udp客户端 js发送udp_JavaScript udp客户端_04

 

一个socket对象主要有以下方法:
bind():绑定端口号。
send():发送数据。
address():获取该socket端口对象相关的地址信息。
close():关闭socket对象。
bind()方法在上文中已经介绍,send()方法用来发送数据,其完
整的参数使用如下:

socket.send(buf, offset, length, port, address[,callback])

buf:代表需要发送的消息,可以是缓存对象或者字符串。
offset:是一个整数数字,代表消息在缓寸中的偏移量。
length:是一个整数数字,代表消息的比特数。
port:代表发送数据的端口号。
address:代表接收数据的socket端口对象的地址。
callback:为数据发送完毕所需调用的回调函数。这个回调函数
的第一个参数是error对象,第二个参数为数据发送的比特数。
因此使用这个方法的代码看起来会是这样:
【代码6-20】 

JavaScript udp客户端 js发送udp_JavaScript udp客户端_05

 

  • 创建UDP客户端

因为UDP客户端本质上其实也是一个socket端口对象,所以同样可
以通过创建一个socket对象来构建UDP客户端,这样得到的是一个
socket对象,所以同样可以使用上述介绍的相关方法。如下代码就可
以实现一个简单的UDP客户端:
【代码6-21】

JavaScript udp客户端 js发送udp_网络协议_06

因此通过创建一个socket对象作为客户端和一个socket对象作为

服务端就可以实现UDP协议的通信了。

【代码6-22】

JavaScript udp客户端 js发送udp_网络协议_07

 【代码6-23】

JavaScript udp客户端 js发送udp_服务器_08

 

运行【代码6-22】和【代码6-23】,依次启动UDP服务器和UDP客
户端,可以发现已经实现了UDP服务器和UDP客户端的通信,如图6.11
和图6.12所示 

JavaScript udp客户端 js发送udp_JavaScript udp客户端_09