NodeJs简明教程将从零开始学习NodeJs相关知识,助力JS开发者构建全栈开发技术栈!
关注获取更多NodeJs精品文章
node
本文是NodeJs简明教程的第十篇,将介绍NodeJs dgram 模块(UDP服务端/客户端
)相关的基本操做。程序员
Internet 协议集支持一个无链接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需创建链接就能够发送封装的 IP 数据报的方法。RFC 768描述了 UDP。
NodeJs使用dgram模块
实现UDP服务端/客户端
相关功能。服务器
dgram.createSocket
用来建立一个Socket对象,能够基于该套接口接收
或发送
数据。该方法原型以下:微信
dgram.createSocket(type[, callback])
socket
<string>
socket类型。udp4
或udp6
,对应ipv4
和ipv6
<Function>
接收到消息时的回调函数server.js函数
const dgram = require('dgram'); const socket = dgram.createSocket('udp4'); socket.on('error', function(err) { // 监听socket错误 console.log('服务器错误', err); socket.close(); }); socket.on('message',function(msg,sender) { // 监听收到数据 console.log('%s:%d => %s', sender.address,sender.port,msg.toString()); // 打印该数据包详情 socket.send('socket: '+msg.toString(),sender.port,sender.address,function(err) { // 发送数据给来源地址 if(err) { console.log('回复%s:%d失败: %s',sender.address,sender.port,err.message); return; } }); }); socket.bind(10000, function() { // 监听UDP端口 console.log('服务器正在监听 %s:%d', socket.address().address, socket.address().port); });
因为telnet
链接服务器使用的是TCP协议
,因此本文对应的客户端须要使用NodeJs开发。学习
client.jsui
const dgram = require('dgram'); const socket = dgram.createSocket('udp4'); // 建立socket实例 socket.on('message', function(msg,sender) { // 监听收到数据 console.log('接收到%s:%d的消息:%s',sender.address,sender.port,msg.toString()); socket.close(); }); socket.send('hello',10000,function(err) { // 向目标端口发送数据 if(err) { console.log('发送错误', err); return; } console.log('发送成功'); });
终端执行node server.js
,输出spa
服务器正在监听 0.0.0.0:10000
终端执行node client.js
,输出code
发送成功 接收到127.0.0.1:10000的消息:server: hello
服务端输出:
127.0.0.1:50577 => hello
NodeJs UDP服务端与客户端开发到此结束,可是使用UDP的状况下,数据包确认、流量控制等等操做都须要程序员手动完成,这一方面确实挺复杂的,没有什么特殊的要求的话使用TCP便可。