2014-12-18 79 views
0

我想與node.js的windows EXE進行通信。我是相當新的Node.jsnode js child spawn stdin stdout exe通信

以這個例子爲起點,但我不能得到它的工作。
http://juristr.com/blog/2014/03/integrating-node-with-csharp/

它看起來像可執行文件沒有啓動,因爲連接是錯誤的,當我運行它。 我看不到在哪裏/如何啓動可執行文件。

EXE代碼(從它工作正常命令行中運行,返回無論是進入)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace LibraryExe 
{ 
    class Program 
    { 
    static void Main(string[] args) 
    { 
     string line; 
     do 
     { 
     line = Console.ReadLine(); 
     try 
     { 
      Console.WriteLine("Recieved - " + line); 
      if (line == "quit") 
      break; 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.Message); 
     } 
     } while (line != null); 
    } 
    } 
} 

Node.js的代碼(似乎並沒有啓動exe程序,連接= FALSE)

console.log('Hello world'); 

    var spawn = require('child_process').spawn; 
    var posProc = spawn('C:/path/LibraryExe.exe', []); 

    posProc.stdout.once('data', function (data) { 
     // write it back on the response object 
     console.log('stdOut'); 
     writeToResponse('we got back ' + data); 
    }); 

    posProc.on('exit', function (code) { 
     console.log('Closed'); 
     writeToResponse('Library closed'); 
    }); 

    posProc.stdout.on('data', function (data) { 
     console.log('stdout: ' + data); 
    }); 

    if (posProc.connected) 
     console.log('connected'); 
    else 
     console.log('not connected'); 

    posProc.stdin.setEncoding = 'utf-8'; 
    posProc.stdin.write('Hello'); 
    posProc.stdin.write('quit'); 
    console.log('ending'); 

回答

3

您的C#代碼正在嘗試讀取,但您並未將任何CRLF對寫入stdin流。試試這個:

posProc.stdin.write('Hello\r\n'); 
posProc.stdin.write('quit\r\n'); 
+0

這樣的工作,但如何連接= false。我甚至檢查「posProc.stdout.once()」中連接的內部,它表示它沒有連接到那裏。 – runfastman

+0

不要打擾查看「連接」和其他未記錄的子進程對象的屬性。他們是實現細節,源於這樣一個事實,即子進程對象是基於套接字(因此是「連接」屬性)。 – mscdex