参数说明
ceateSocket(type, callback)
type 通讯协议,值:upd4、upd6
callback{ 可选,回调函数,接收到数据调用,可用 message 事件代替
data, 接收到的数据,类型Buffer
object={ 对象数组
size:0, 发送方发送数据的字节数
address:"127.0.0.1", 发送方IP地址
port:8080, 发送方端口
family:"IPv4" 发送方IP地址使用的类型,可能的值:IPv4、IPv6
}
}
返回值:端口对象,参考:Socket
示例1
服务器:
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.bind(8080, "localhost", function(){
console.log("开始监听");
});
server.on("error", function(err){ //发生错误
console.log("错误error");
});
server.on("message", function(data, obj){ //接收到数据
console.log(data.toString());
var str = Buffer.from("我是UDPA");
// 注意:send中设置的 端口obj.port、地址obj.address 是接收到数据的对象端口,不是自定义
server.send(str, 0, str.length, obj.port, obj.address, function(err, bytes){
if(err){
console.log("发送失败");
}else{
console.log("发送字节数:"+bytes);
}
});
});
客户端:
var dgram= require("dgram");
var client = dgram.createSocket("udp4");
client.on("error", function(err){ //发生错误
console.log("错误error");
});
client.on("message", function(data, obj){ //接收到数据
console.log(data.toString());
});
setTimeout(function(){ //测试注意先开服务器端
var str = Buffer.from("我是UDPB");
// 指定服务器监听的端口及地址
client.send(str, 0, str.length, 8080, "localhost", function(err, bytes){
if(err){
console.log("发送失败");
}else{
console.log("发送字节数:"+bytes);
}
});
}, 2000);
//注意:客户端不用 bind方法监听端口
示例2:广播消息
服务器:
var dgram = require("dgram");
var server = dgram.createSocket("udp4");
server.on("message", function(data, obj){ //接收到数据
console.log(data.toString());
});
//注意:bind方法中的IP是本机的局域网IP
server.bind(8080, "192.168.0.1",function(){ //监听,服务端用于监听消息的 IP、端口
//注意:该方法需要在bind成功后设置
server.setBroadcast(true); //设置为广播服务器
});
setTimeout(function(){ //测试每2秒向192.168.0.0 ~ 192.168.0.255发送消息
var str = Buffer.from("测试liboke");
server.send(str, 0, str.length, 8081, "192.168.0.255");
}, 2000);
客户端:
var dgram = require("dgram");
var client = dgram.createSocket("udp4");
//注意:监听IP为本机局域网IP,端口不能和服务器监听端口相同
client.bind(8081, "192.168.0.100"); //监听,udpgb客户端局域网的IP 及 监听端口
client.on("message", function(data, obj){ //接收到数据
console.log(data.toString());
var str = Buffer.from("udpga收到");
client.send(str, 0, str.length, 8080, "192.168.0.1"); //向服务器端口发送消息
});
说明:多个客户端,代码相同,主要设置bind的本机监听IP、端口