var key = scoket.remoteAddress+':'+socket.remotePort; users[key] = {name:'匿名',socket}; socket.on('data',function(){ parse(data); }); function parse(msg){ swtich(msg.type){ case 'secret': secret(msg.user,msg.text); break; } case 'boardcast': boardcast(message.text); break; case 'cname': cname(messsage.text); break; case 'list': list(); break; default: socket.write('不能识别命令'); break; } function secret(user,text){ } function boardcast(text){ } function cname(text){ } function list(){ }
b:text 广播 c:nickname:text 私聊 n:nickname 改名 l 列出在线用户列表 on('data',function(data){ if(data == 'quit){ }else if(data == 'help'){ }else(){ write(data); } }); function convert(){ }
1.3 类方法
isIP 判断字符串是否是IP
isIPv4 判断字符串是否是IPv4地址
isIPv6 判断字符串是否是IPv6地址
2. UDP
2.1 创建socket
let socket = dgram.createSocket(type,[callback]); socket.on('messsage',function(msg,rinfo){});
type 必须输入,制定时udp4还是udp6
callback 从该接口接收到数据时调用的回调函数
msg 接收到的数据
rinfo 信息对象
address 发送着的地址
family ipv4还是ipv6
port 发送者的socket端口号
size 发送者所发送的数据字节数
socket.bind(port,[address],[callback]); socket.on('listening',callabck;
port 绑定的端口号
address 监听的地址
callback 监听成功后的回调函数
2.2 向外发送数据
如果发送数据前还没有绑定过地址和端口号,操作系统将为其分配一个随机端口并可以接收任何地址的数据
socket.send(buf,offset,length,port,address,[callback]);
buffer 代表缓存区
offset 从缓存区第几个字节开始发
length 要发送的字节数
port 对方的端口号
address 接收数据的socket地址
callback 制定当数据发送完毕时所需要的回调函数
err 错误对象
byets 实际发送的字节数
2.3 address
获取此socket相关的地址信息
let address = socket.address();
port
address
family
2.4 UDP服务器
var dgram = require('dgram'); var socket = dgram.createSocket('udp4'); socket.on('message',function(msg,rinfo){ console.log(msg.toString()); console.log(rinfo); socket.send(msg,0,msg.length,rinfo.port,rinfo.address); }); socket.bind(41234,'localhost');
2.5 UDP客户端
var dgram = require('dgram'); var socket = dgram.createSocket('udp4'); socket.on('message',function(msg,rinfo){ console.log(msg.toString()); console.log(rinfo); }); socket.setTTL(128); socket.send(new Buffer('zz'),0,6,41234,'localhost',function(err,bytes){ console.log('发送了个%d字节',bytes); }); socket.on('error',function(err){ console.error(err); });
2.6 广播
创建一个UDP服务器并通过该服务器进行数据的广播
2.6.1 服务器
let dgram = require('dgram'); let server = dgram.createSocket('udp4); server.on('message',function(msg){ let buf = new Bufffer('已经接收客户端发送的数据'+msg); server.setBroadcast(true); server.send(buf,0,buf.length,41235,"192.168.1.255"); }); server.bind(41234,'192.168.1.100');
2.6.2 客户端
let dgram = require('dgram'); let client = dgram.createSocket('udp4); client.bind(41235,'192.168.1.102); let buf = new Buffer('hello'); client.send(buf,0,buf.length,41234,'192.168.1.100'); client.on('message',function(msg,rinfo){ console.log('received : ',msg); });
2.7 组播