深入Node TCP模块的理解(3)

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 组播

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/40b35ab65bf469de91aae6befe798c52.html