6

小さな ping スクリプトを作成したいと考えています。私はnode jsの初心者です。私の最終的な小さな目標は、クライアントがサーバーに ping を実行するようにすることです。サーバーがコンソールにメッセージを記録してパケットを確認し、同じパケット/メッセージをクライアントに送り返すようにします。

これは私がこれまでに持っているものです:

サーバ:

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++;
});

アップデート:

ありがとう!それは本当に役に立ちました。しかし、別の質問があります。特定のバイト数でパケットを送信したいとしましょう。'message.length' を 1000 で 1kb に置き換えますか? しかし、「throw new Error('Offset + length beyond buffer length');」というエラーが発生します。

理由がよくわかりません。

4

2 に答える 2

9

1 つはデータを送信することで、もう 1 つはデータを受信することです。UDP プロトコルは双方向であるため、実際にはクライアントとサーバーの間に厳密な違いはありません。したがって、サーバーとクライアントのコードはほぼ同じになります。違いは、実際には一方がパケットを送信し、他方が応答のみを行うことです。.sendまた、おそらくwith変数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" );
于 2012-11-12T20:19:22.933 に答える