模块概览

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

相关链接

https://nodejs.org/api/dgram.html

最新文章

  1. 黄聪:主机宝安装wordpress注意事项
  2. 从实验室搬到宿舍后可以上QQ但打不开网页
  3. 第二百五十三、四、五天 how can I 坚持
  4. 【转】gcc warning: braces around scalar initializer (标量初始化的括号)
  5. shell脚本之变量与状态码
  6. Kettle文本文件输出和输入控件使用中,换行符导致的问题处理
  7. Linux(Centos7)下搭建SVN服务器 (转载)
  8. 转://如何创建ASM磁盘
  9. gym 101081 gym F. Auction of Services 最小生成树+倍增LCA
  10. Asp.net与office web apps的整合
  11. 一个基于JRTPLIB的轻量级RTSP客户端(myRTSPClient)——实现篇:(九)以g711-mulaw为例添加新的编码格式解析支持
  12. mysql++ result
  13. Mysql数据库查询数据文件大小
  14. PAT 1082 射击比赛(20)(代码+思路)
  15. JDK动态代理[2]----JDK动态代理的底层实现之Proxy源码分析
  16. .net下log4net的使用
  17. zw版【转发·台湾nvp系列Delphi例程】HALCON MoveRectangle
  18. 在TypeScript中使用其他JS框架或库的方法
  19. maven编译错误,警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除
  20. 创建squashfs

热门文章

  1. ubuntu12.04下NFS链接开发板并测试交叉编译的第一个应用
  2. .net垃圾回收-原理浅析
  3. html5+css3+javascript 自定义弹出窗口
  4. (转载)安卓6.0之前的系统 判断app是否有录音权限
  5. Java文件(io)编程——简易记事本开发
  6. select标签下option标签里value属性有什么用以及和text的区别
  7. 通过curl获取网页访问时间
  8. SpringCloud学习笔记(6)----Spring Cloud Netflix之负载均衡-Ribbon的使用
  9. layui计算剩余时间
  10. (一)React再学习