0

我的代码片段有一点问题。我写了一个例子来学习一个项目的 TCP Socket 通信。目前我可以发送一个 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;
}

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

4

2 回答 2

2

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

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

收到的消息只能在事件处理程序中正确处理data。你必须从这里调用你的另一部分。

于 2013-10-02T15:24:44.387 回答
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
              })

  });
于 2018-04-19T05:21:18.410 回答