NodeJS学习笔记 (11)网络UDP-dgram(ok)
2024-08-31 13:29:09
模块概览
dgram模块是对UDP socket的一层封装,相对net模块简单很多,下面看例子。
UPD客户端 vs UDP服务端
首先,启动UDP server,监听来自端口33333的请求。
server.js
// 例子:UDP服务端
var PORT = 33333;
var HOST = '127.0.0.1'; var dgram = require('dgram');
var server = dgram.createSocket('udp4'); server.on('listening', function () {
var address = server.address();
console.log('UDP Server listening on ' + address.address + ":" + address.port);
}); server.on('message', function (message, remote) {
console.log(remote.address + ':' + remote.port +' - ' + message);
}); server.bind(PORT, HOST);
然后,创建UDP socket,向端口33333发送请求。
client.js
// 例子:UDP客户端
var PORT = 33333;
var HOST = '127.0.0.1'; var dgram = require('dgram');
var message = Buffer.from('My KungFu is Good!'); var client = dgram.createSocket('udp4'); client.send(message, PORT, HOST, function(err, bytes) {
if (err) throw err;
console.log('UDP message sent to ' + HOST +':'+ PORT);
client.close();
});
运行 server.js。
node server.js
运行 client.js。
➜ 2016.12.22-dgram git:(master) ✗ node client.js
UDP message sent to 127.0.0.1:33333
服务端打印日志如下
UDP Server listening on 127.0.0.1:33333
127.0.0.1:58940 - My KungFu is Good!
广播
通过dgram实现广播功能很简单,服务端代码如下。
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var port = 33333; server.on('message', function(message, rinfo){
console.log('server got message from: ' + rinfo.address + ':' + rinfo.port);
}); server.bind(port);
接着创建客户端,向地址'255.255.255.255:33333'进行广播。
var dgram = require('dgram');
var client = dgram.createSocket('udp4');
var msg = Buffer.from('hello world');
var port = 33333;
var host = '255.255.255.255'; client.bind(function(){
client.setBroadcast(true);
client.send(msg, port, host, function(err){
if(err) throw err;
console.log('msg has been sent');
client.close();
});
});
运行程序,最终服务端打印日志如下
➜ 2016.12.22-dgram git:(master) ✗ node broadcast-server.js
server got message from: 192.168.0.102:61010
相关链接
最新文章
- 黄聪:主机宝安装wordpress注意事项
- 从实验室搬到宿舍后可以上QQ但打不开网页
- 第二百五十三、四、五天 how can I 坚持
- 【转】gcc warning: braces around scalar initializer (标量初始化的括号)
- shell脚本之变量与状态码
- Kettle文本文件输出和输入控件使用中,换行符导致的问题处理
- Linux(Centos7)下搭建SVN服务器 (转载)
- 转://如何创建ASM磁盘
- gym 101081 gym F. Auction of Services 最小生成树+倍增LCA
- Asp.net与office web apps的整合
- 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(九)以g711-mulaw为例添加新的编码格式解析支持
- mysql++ result
- Mysql数据库查询数据文件大小
- PAT 1082 射击比赛(20)(代码+思路)
- JDK动态代理[2]----JDK动态代理的底层实现之Proxy源码分析
- .net下log4net的使用
- zw版【转发·台湾nvp系列Delphi例程】HALCON MoveRectangle
- 在TypeScript中使用其他JS框架或库的方法
- maven编译错误,警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除
- 创建squashfs
热门文章
- ubuntu12.04下NFS链接开发板并测试交叉编译的第一个应用
- .net垃圾回收-原理浅析
- html5+css3+javascript 自定义弹出窗口
- (转载)安卓6.0之前的系统 判断app是否有录音权限
- Java文件(io)编程——简易记事本开发
- select标签下option标签里value属性有什么用以及和text的区别
- 通过curl获取网页访问时间
- SpringCloud学习笔记(6)----Spring Cloud Netflix之负载均衡-Ribbon的使用
- layui计算剩余时间
- (一)React再学习