• NodeJS学习笔记 (11)网络UDP-dgram(ok)


    模块概览

    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

  • 相关阅读:
    CAAnimation动画相关文章
    [源代码]List的增加与删除
    [原创]c# 类中 Collection 字段初始化的特殊之处
    c# 多数值区间判断是否有重叠
    将M个客服随机分配给N个客户
    c# IList.ToList()后更改元素值会不会影响原列表的值
    java单元测试之Mock静态方法
    java的Spring学习2- junit和mock
    java mybatis学习二
    java8 方法引用与lambda
  • 原文地址:https://www.cnblogs.com/eret9616/p/9188132.html
Copyright © 2020-2023  润新知