2013-10-02 102 views
0

我的代碼snipet有點問題。我寫了一個例子來學習項目的TCP Socket通信。目前我可以發送TCP套接字並閱讀答案,但我想在其他軟件部分使用該答案。爲此,我嘗試使用變量socketmessage,但這不起作用。有沒有人有我的問題的答案?非常感謝Node.js讀取TCPSocket並寫入變量

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}

回答

1

這是因爲功能getSocketMessage是異步。您正試圖返回收到的消息。該函數立即返回,outData未定義。它的值是當數據從服務器到達時設置的 。網絡I/O是事件觸發,你使用事件是data

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

收到的消息只能在事件處理程序中處理不當的data。你將不得不從這裏打電話給你的其他部分。