【问题标题】:Nodejs Net TCP client data event triggered without any write action in server sideNodejs Net TCP客户端数据事件触发,服务器端没有任何写操作
【发布时间】:2017-07-05 23:41:14
【问题描述】:

我正在使用 net 模块来构建一个简单的服务器/客户端示例。客户端在建立连接后只是发送一个简单的消息,而服务器端什么也没做,只是打印一些日志,但之后我发现客户端的数据事件被触发了,接收到的数据就是它发送的数据到服务器(但服务器没有向客户端写入任何内容)。

Client.js:

var net = require('net');

  var port = 3540;
  var hostName = "127.0.0.1";

  var client = new net.Socket();
  client.connect(port, hostName, function() {
     console.log("Connected to the remote host: " + hostName + ":" + port);
     client.write("hello,world");
     client.end();
  });
  var bytesReceived = 0;
  client.on('data', function(data) {
    bytesReceived += data.length;
    console.log('Received bytes: ' + data.length + ', total bytes received: ' + bytesReceived);
    console.log(data.toString())
    })

  client.on('error', function(error) {
    console.log(error);
    client.destroy();
  });

  client.on('close', function() {
    console.log('Closed connection');
  })

server.js:

var net = require('net');
    port = 3540;

var log = function(who, what) {
  return function() {
    var args = Array.prototype.slice.call(arguments);
    console.log('[%s on %s]', who, what, args);
  };
};
var count = 0
var echo = function (socket) {
  socket.on('end', function() {
    console.log('recevied a FIN packet');
    socket.end();
  });
  socket.on('data', function(data) {
    console.log(count + ': received bytes: ' + data.length);
    count++;
  });
  socket.on('error', function(error) {
    console.log(error);
    socket.destroy();
  });
  socket.on('close', function() {
    console.log('connection has been closed!');
  });
  socket.pipe(socket);
}


var server = net.createServer(echo);
server.listen(port); // port or unix socket, cannot listen on both with one server

server.on('listening', function() {
  var ad = server.address();
  if (typeof ad === 'string') {
    console.log('[server on listening] %s', ad);
  } else {
    console.log('[server on listening] %s:%s using %s', ad.address, ad.port, ad.family);
  }
});

server.on('connection', function(socket) {
  server.getConnections(function(err, count) {
    console.log('%d open connections!', count);
  });
});

server.on('close', function() { console.log('[server on close]'); });
server.on('err', function(err) {
  console.log(err);
  server.close(function() { console.log("shutting down the server!"); });
});

然后客户端打印出来:

Connected to the remote host: 127.0.0.1:3540
Received bytes: 11, total bytes received: 11
hello,world
Closed connection

【问题讨论】:

    标签: node.js


    【解决方案1】:

    但服务器没有向客户端写入任何内容

    确实如此:

    socket.pipe(socket)
    

    这会将接收到的数据客户端(由socket表示)回显客户端。

    【讨论】:

    • 哦!我懂了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    • 2012-01-25
    • 2013-01-19
    • 2012-12-12
    • 1970-01-01
    • 2022-01-12
    相关资源
    最近更新 更多