1

node.js を使用して tcp サービスを構築するための基礎を学び、利用可能な情報を把握するために、単純なエコー サーバーを構築しています。

以下に示すように、サーバーを作成しているとき、リモート アドレスなどの incomingSocket に関する情報にアクセスできます。ソケットのクローズに関する情報にアクセスできないのはなぜですか? 以下は私のコードです。私のコメントは、私が受け取った出力を示しています。

var net = require ( 'net' );
var server = net.createServer (
    function ( incomingSocket )
    {
        //'connection' listener
        console.log ( 'Connection from ' + incomingSocket.remoteAddress + ':' + incomingSocket.remotePort + " established." );

        incomingSocket.on (
            'data' ,
            function ( data )
            {
                // The incomingSocket.remoteAddress is defined here
                console.log ( incomingSocket.remoteAddress + ':' + incomingSocket.remotePort + ' -> ' + data.toString () );
            }
        );

        incomingSocket.on (
            'close' ,
            function ()
            {
                // The incomingSocket.remoteAddress is undefined here
                console.log ( 'connection from ' + incomingSocket.remoteAddress + ' closed.' );
            }
        );
        incomingSocket.pipe ( incomingSocket );
    }
);
// listening to a port happens here

返信をいただければ幸いです。ありがとうございました!

4

1 に答える 1

4

いいえ、ソケットクローズイベントのイベントハンドラーに入ると、ソケットオブジェクトは存在しなくなります。ソケットが閉じているときにクライアントのリモートアドレスを表示する必要がある場合は、クライアントが最初に接続するときにリモートアドレスを保存するだけです。

var clients = new Array();

net.createServer(function(socket) {
   var remoteAddress = socket.remoteAddress;
   var remotePort = socket.remotePort;

   // Add to array of clients
   clients.push(remoteAddress + ':' + remotePort);

   console.log('Connection from ' + remoteAddress  + ':' + remotePort + " established.");

   socket.on('data', function(data) {
      console.log(remoteAddress + ':' + remotePort + ' -> ' + data.toString());
   });

   socket.on('close', function() {
      // Remove from array of clients
      clients.splice(clients.indexOf(remoteAddress + ':' + remotePort), 1);

      console.log('Connection from ' + remoteAddress + ':' + remotePort + ' closed.');
   });

   ...
于 2012-06-14T18:25:34.977 に答える