Node.js读取TCPSocket并写入变量

时间:2013-10-02 13:45:27

标签: node.js sockets tcp

我的代码snipet遇到了一个问题。我写了一个例子来学习项目的TCP套接字通信。目前我可以发送TCP套接字并阅读答案,但我想在其他软件部分中使用答案。为此我试图使用变量socketmessage但这不起作用。有没有人能解决我的问题?非常感谢

var net = require('net');
var client = new net.Socket();
var HOST='127.0.0.1';
var PORT='20000';

var MSG="{\"REQUEST\":\"STATUS\"}";    
var socketmessage;

socketmessage=getSocketMessage(MSG);
console.log ("Socket Message: " + socketmessage);

function getSocketMessage(tcpmsg){
  var outData;

  client.connect(PORT, HOST, function() {
    console.log("Client: " + tcpmsg);
    client.write(tcpmsg);
  });

  client.setTimeout(5000, function() {  client.destroy(); });

  client.on('data', function(data) {
    console.log('Server: ' + data);
    outData = data.toString('utf8');
    console.log ("Socketmessage: " + outData);
    client.destroy();
  });

  //Add a 'close' event handler for the client socket
  client.on('close', function() {
    console.log('Connection closed');
  });

  // Add a 'error' event handler for the client socket
  client.on('error', function(error) {
    console.log('Error Connection: ' + error);
  });

  return outData;
}

终端: 套接字消息:未定义 客户:{“请求”:“状态”} 服务器:{“STATUS”:0.000000}

2 个答案:

答案 0 :(得分:2)

这是因为函数getSocketMessage是异步的。您正在尝试返回收到的消息。该函数立即返回,outData未定义。它的价值在于 数据从服务器到达时设置。网络I / O已暂停,您使用的事件为data

client.on('data', function(data) {

收到的消息只能在data的事件处理程序中正确处理。你必须从这里打电话给你的其他部分。

答案 1 :(得分:0)

您可以创建一个读取流,一旦流结束,您可以处理数据。

var readStream = fs.createReadStream(path of the file, 'utf8'); //you can use path.join(loc, filename)
 var data = '';
 readStream.on('data', function(chunk:any) {              
                data += chunk;
              }).on('end', function() {
                let gotContent = data.toString(); //
                doWhatEver(gotContent)  //the method is async or promose
              then(function(result){
                console.log(result); //desired output
              })

  });