NODEJS UDP通信
nodejsマルチキャスト通信
最近はnodejsトランスポート層通信の内容を勉強したいです.インターネットで資料を探して自分で勉強しました.自分宛のNodeJs-通信システム-udgramモジュールNode.js:dgramモジュールでUDP通信Node.js Manudual&Docmentation nodejsがTCP/UDPの通信をサポートします.ここではマルチキャスト通信を試してみたいです.まずdgramのUDP通信を試してみます.
UDPマルチキャスト
tcp/ipプロトコルのクラスタの中でIANAはDタイプのipアドレスをマルチキャストに割り当てています.具体的には224.0.0.0-2239.255.255です.各ipは、IGMPプロトコルによって維持されるマルチキャストグループとしてマークすることができる.マルチキャストipアドレスは具体的にいくつかの細分があります.
実現する
//コードは参考のノード.js:dgramモジュールでUDP通信を実現します.
サービスコード:
同じホストコンピュータではサーバとクライアントが通信できますが、異なるホスト間では通信できません.
推測はホストの上でLANが多すぎて、サーバーは異なっているネットカードを選んで、1つのネットの区間の中でないことを招きます.パケットソースIPをキャプチャし、別の仮想セグメントを使用することを確認した.他のネットワークセグメントのカードを無効にして問題を解決します.
UDP放送
放送住所
ブロードキャストアドレスはマルチキャストよりも簡単で、IPプロトコルはホスト番号がすべて1のアドレスをブロードキャストに残しました.ホスト番号とサブネットマスクを利用して、現在のセグメントのブロードキャストアドレスを算出することができます.
最近はnodejsトランスポート層通信の内容を勉強したいです.インターネットで資料を探して自分で勉強しました.自分宛のNodeJs-通信システム-udgramモジュールNode.js:dgramモジュールでUDP通信Node.js Manudual&Docmentation nodejsがTCP/UDPの通信をサポートします.ここではマルチキャスト通信を試してみたいです.まずdgramのUDP通信を試してみます.
UDPマルチキャスト
tcp/ipプロトコルのクラスタの中でIANAはDタイプのipアドレスをマルチキャストに割り当てています.具体的には224.0.0.0-2239.255.255です.各ipは、IGMPプロトコルによって維持されるマルチキャストグループとしてマークすることができる.マルチキャストipアドレスは具体的にいくつかの細分があります.
224.0.0.0~224.0.0.255// , 224.0.0.0 , ;
224.0.1.0~224.0.1.255// , Internet;
224.0.2.0~238.255.255.255// ( ), ;
239.0.0.0~239.255.255.255// , 。
dgramモジュールのaddMember ship()方法により、socketをマルチキャストグループに参加させ、DRopMember ship()方法でマルチキャストグループを脱退する.マルチキャストグループに参加してこそ、マルチキャストデータを受信することができます.実現する
//コードは参考のノード.js:dgramモジュールでUDP通信を実現します.
サービスコード:
/*server*/
const dgram = require('dgram');
const server = dgram.createSocket('udp4'); // udp
const multicastAddr = '224.100.100.100';
// server.on
server.on('close',()=>{ // ()=> ES6 , function()
console.log('socket ');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket ...');
server.addMembership(multicastAddr); //
server.setMulticastTTL(128);
});
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
function sendMsg(){
var message = ' , .';
server.send(message,0,message.length,8061,multicastAddr);
// server.send
// , (buffer string), ( ), , ,
}
server.bind(8060); // , send
//
setInterval(()=>{
sendMsg();
console.log("send message");
},1500);
クライアントコード:/*client*/
//
const dgram = require('dgram');
const client = dgram.createSocket('udp4');
const multicastAddr = '224.100.100.100';
client.on('close',()=>{
console.log('socket ');
});
client.on('error',(err)=>{
console.log(err);
});
client.on('listening',()=>{
console.log('socket ...');
client.addMembership(multicastAddr);
});
client.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}:${msg}`);
});
client.bind(8061);
遭遇した問題同じホストコンピュータではサーバとクライアントが通信できますが、異なるホスト間では通信できません.
推測はホストの上でLANが多すぎて、サーバーは異なっているネットカードを選んで、1つのネットの区間の中でないことを招きます.パケットソースIPをキャプチャし、別の仮想セグメントを使用することを確認した.他のネットワークセグメントのカードを無効にして問題を解決します.
UDP放送
放送住所
ブロードキャストアドレスはマルチキャストよりも簡単で、IPプロトコルはホスト番号がすべて1のアドレスをブロードキャストに残しました.ホスト番号とサブネットマスクを利用して、現在のセグメントのブロードキャストアドレスを算出することができます.
IP :10.108.92.2
:255.255.252.0
-> -> IP -> 10.108.95.255
最後のコードは下記の通りです.上でマルチキャストされたクライアントとサーバーのエンドコードを通じてもよく見えます.実はUDP通信には接続が確立されていません.サービスとクライアントを過度に区別しなくてもいいです.データを送るのはサービスです.受信するのはクライアントです.var dgram = require('dgram');
var server = dgram.createSocket('udp4');
server.on('close',()=>{
console.log('socket ');
});
server.on('error',(err)=>{
console.log(err);
});
server.on('listening',()=>{
console.log('socket ...');
server.setBroadcast(true);//
server.setTTL(128);// TTL ,
server.send(' , .',8061,'10.108.95.255');
// send {msg=close} colse
});
// message ,
server.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
// ,
server.bind('8060','10.108.92.2');