server.js
/*创建简单的UDP服务器*/
var dgrm = require('dgram');
var server = dgrm.createSocket('udp4');//udp4为指定UDP通信的协议类型
server.on('message',function (msg, rinfo) {
console.log('已收到客户端发送的数据:'+msg);
console.log('客户端地址信息为&j',rinfo);
var buf = new Buffer('确认信息:'+msg);
//server.sent(Buffer,offset,length,port,address,[callback])
server.send(buf,0,buf.length,rinfo.port,rinfo.address);
});
//当socket对象开始监听指定的端口和地址时,触发socket端口的listening事件
/*server.on('listening',function () {
var address = server.address();
console.log('服务器开始监听。地址信息为&j',address);
});*/
server.bind(3000,'localhost',function () {
//bind方法中也可以不写回调函数,单独监听listening事件
var address = server.address();
console.log('服务器开始监听。地址信息为&j',address);
});
client.js:
/*创建简单的UDP客户端*/
var dgram = require('dgram');
var mess = new Buffer('您好');
var client = dgram.createSocket('udp4');
client.send(mess,0,mess.length,3000,'localhost',function (err, bytes) {
if(err)
console.log('发送数据失败');
else {
console.log('已发送%d字节数据',bytes);
}
});
client.on('message',function (msg, rinfo) {
console.log('已接收服务器发送的数据:%s',msg);
console.log('服务器的地址为%s',rinfo.address);
console.log('服务器所用端口为%s',rinfo.port);
client.close();
});
client.on('close',function () {
console.log('socket端口被关闭');
});
下面分别为服务器和客户端的运行效果:
server.js
/*使用socket端口的对象的unref方法允许应用程序的正常退出*/
var dgrm = require('dgram');
var server = dgrm.createSocket('udp4');//udp4为指定UDP通信的协议类型
server.on('message',function (msg, rinfo) {
console.log('已收到客户端发送的数据:'+msg);
console.log('客户端地址信息为&j',rinfo);
var buf = new Buffer('确认信息:'+msg);
//server.sent(Buffer,offset,length,port,address,[callback])
server.send(buf,0,buf.length,rinfo.port,rinfo.address);
//当客户端关闭10秒后关闭服务器
setTimeout(function () {
server.unref();
},10000);
});
server.bind(3000,'localhost',function () {
//bind方法中也可以不写回调函数,单独监听listening事件
var address = server.address();
console.log('服务器开始监听。地址信息为&j',address);
});
client.js
/*取消UDP客户端socket端口的关闭*/
var dgram = require('dgram');
var mess = new Buffer('您好');
var client = dgram.createSocket('udp4');
client.send(mess,0,mess.length,3000,'localhost',function (err, bytes) {
if(err)
console.log('发送数据失败');
else {
console.log('已发送%d字节数据',bytes);
}
});
client.on('message',function (msg, rinfo) {
console.log('已接收服务器发送的数据:%s',msg);
console.log('服务器的地址为%s',rinfo.address);
console.log('服务器所用端口为%s',rinfo.port);
client.close();
});
client.on('close',function () {
console.log('socket端口被关闭');
});