NodeJs簡明教程將從零開始學習NodeJs相關知識,助力JS開發者構建全棧開發技術棧!node
關注獲取更多NodeJs精品文章
程序員
本文是NodeJs簡明教程的第十篇,將介紹NodeJs dgram 模塊(UDP服務端/客戶端
)相關的基本操做。服務器
Internet 協議集支持一個無鏈接的傳輸協議,該協議稱爲用戶數據報協議(UDP,User Datagram Protocol)。UDP 爲應用程序提供了一種無需創建鏈接就能夠發送封裝的 IP 數據報的方法。RFC 768描述了 UDP。微信
NodeJs使用dgram模塊
實現UDP服務端/客戶端
相關功能。socket
dgram.createSocket
用來建立一個Socket對象,能夠基於該套接口接收
或發送
數據。該方法原型以下:函數
dgram.createSocket(type[, callback])
學習
<string>
socket類型。udp4
或udp6
,對應ipv4
和ipv6
<Function>
接收到消息時的回調函數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);
});
複製代碼
因爲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('發送成功');
});
複製代碼
終端執行node server.js
,輸出
服務器正在監聽 0.0.0.0:10000
複製代碼
終端執行node client.js
,輸出
發送成功
接收到127.0.0.1:10000的消息:server: hello
複製代碼
服務端輸出:
127.0.0.1:50577 => hello
複製代碼
NodeJs UDP服務端與客戶端開發到此結束,可是使用UDP的狀況下,數據包確認、流量控制等等操做都須要程序員手動完成,這一方面確實挺複雜的,沒有什麼特殊的要求的話使用TCP便可。