NodeJs簡明教程(10)

NodeJs簡明教程將從零開始學習NodeJs相關知識,助力JS開發者構建全棧開發技術棧!node

關注獲取更多NodeJs精品文章 程序員

二維碼

本文是NodeJs簡明教程的第十篇,將介紹NodeJs dgram 模塊(UDP服務端/客戶端)相關的基本操做。服務器

啥是UDP

Internet 協議集支持一個無鏈接的傳輸協議,該協議稱爲用戶數據報協議(UDP,User Datagram Protocol)。UDP 爲應用程序提供了一種無需創建鏈接就能夠發送封裝的 IP 數據報的方法。RFC 768描述了 UDP。微信

NodeJs使用dgram模塊實現UDP服務端/客戶端相關功能。socket

dgram.createSocket用來建立一個Socket對象,能夠基於該套接口接收發送數據。該方法原型以下:函數

dgram.createSocket(type[, callback])學習

  • type <string> socket類型。udp4udp6,對應ipv4ipv6
  • callback <Function> 接收到消息時的回調函數

Echo服務端開發

server.jsui

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);
});
複製代碼

Echo客戶端開發

因爲telnet鏈接服務器使用的是TCP協議,因此本文對應的客戶端須要使用NodeJs開發。spa

client.jscode

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('發送成功');
});
複製代碼

執行

  1. 終端執行node server.js,輸出

    服務器正在監聽 0.0.0.0:10000
    複製代碼
  2. 終端執行node client.js,輸出

    發送成功
    接收到127.0.0.1:10000的消息:server: hello
    複製代碼
  3. 服務端輸出:

    127.0.0.1:50577 => hello
    複製代碼

結語

NodeJs UDP服務端與客戶端開發到此結束,可是使用UDP的狀況下,數據包確認、流量控制等等操做都須要程序員手動完成,這一方面確實挺複雜的,沒有什麼特殊的要求的話使用TCP便可。

微信羣
相關文章
相關標籤/搜索