2012-11-12 20 views
6

小さいpingスクリプトを作成したいと思います。私はノードjsの初心者です。私の最終的な小さな目標は、クライアントにサーバーにpingをさせることです。私はサーバーがコンソールにメッセージを記録することによってパケットを確認し、同じパケット/メッセージをクライアントに送り返したいと思っています。ノードJS:Pingサーバーとクライアント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); 
    // I added a server.send but it gave me an infinite loop in the server console 

}); 

server.bind(PORT, HOST); 

クライアント:

var PORT = 33333; 
var HOST = '127.0.0.1'; 

var dgram = require('dgram'); 
var message = new Buffer('My KungFu is Good!'); 

var client = dgram.createSocket('udp4'); 

client.on('message', function (message, remote) { 

    console.log("The packet came back"); 

}); 


client.send(message, 0, message.length, PORT, HOST, function(err, bytes) { 
    if (err) throw err; 
    console.log('UDP message sent to ' + HOST +':'+ PORT); 
    count++; 
}); 

UPDATE:

ありがとう!それが本当に助けになりました。 しかし私は別の質問があります。 パケットを特定のバイト数で送信したいとします。 私は1kbのために 'message.length'を1000に置き換えますか? しかし、私は '新しいエラー('オフセット+バッファの長さを超えて長さ ');をスローするエラーが発生しました;

私はなぜそれほど理解できません。

答えて

9

一方はデータを送信し、もう一方は受信しています。 UDPプロトコルは双方向であるため、実際にはクライアントとサーバーの間に厳密な違いはありません。したがって、サーバーとクライアントのコードはほぼ同じになりますが、違いは実際にはパケットを送信し、その他は応答するだけです。また、をPORTHOSTという変数で使用し、異なるホスト/ポートのペアに送信する必要があるため、無限ループがあることにも注意してください。

サーバー

var host = "127.0.0.1", port = 33333; 

var dgram = require("dgram"); 

var server = dgram.createSocket("udp4"); 

server.on("message", function(msg, rinfo) { 
    console.log(rinfo.address + ':' + rinfo.port + ' - ' + msg); 
    server.send(msg, 0, msg.length, rinfo.port, rinfo.address); // added missing bracket 
}); 
server.bind(port, host); 

クライアント

// NOTE: the port is different 
var host = "127.0.0.1", port = 33334; 

var dgram = require("dgram"); 

var client = dgram.createSocket("udp4"); 

client.on("message", function(msg, rinfo) { 
    console.log("The packet came back"); 
}); 

// client listens on a port as well in order to receive ping 
client.bind(port, host); 

// proper message sending 
// NOTE: the host/port pair points at server 
var message = new Buffer("My KungFu is Good!"); 
client.send(message, 0, message.length, 33333, "127.0.0.1"); 
+0

ありがとう:

はここでの例です!それが本当に助けになりました。 しかし私は別の質問があります。 パケットを特定のバイト数で送信したいとします。 私は1kbのために 'message.length'を1000に置き換えますか? しかし、私は '新しいエラー('オフセット+バッファの長さを超えて長さ ');をスローするエラーが発生しました; 私はなぜそれほど理解できません。 –

+0

あなたのバッファは18バイトの長さです( "My KungFu is Good!"長さ、デフォルトのコーデックは文字あたりASCII /バイナリバイトです)。 'var message = new Buffer(1000);'でメッセージを作成して1000バイトを送信する –

関連する問題