我的代码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}
答案 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
})
});