none
VB.NET如何將主控臺程式的輸入、輸出重導至我的程式 RRS feed

  • 問題

  • 小弟用VB.NET寫一個XP系統下能接受多人Telnet 的程式 (Telnet Daemon),

    別人連線到這個程式之後,這支Daemon會自動執行另一支主控台(Win32 console)程式,

    來達到類似BBS站台的功能,

    所以Client的輸入傳到Daemon之後要再傳給主控台那支程式當輸入,

    而主控台程式的輸出也是傳給Daemon之後再傳給Client。

     

    我知道用Socket可以讓Daemon 和主控台程式傳遞訊息,

    但是這樣兩邊的溝通介面都被綁死了,

    以後同事再寫別支主控台程式的時候一定也要用Socket傳,

    希望能夠在Daemon裡面寫成:只要主控台程式程式可跑,掛上去Daemon就可以用了

     

    目前的作法是在Daemon裡面用Process.start()來喚起主控台程式

      

       Dim myProcess As New Process

     

       myProcess.StartInfo.FileName = "路徑"
         myProcess.StartInfo.UseShellExecute = False
         myProcess.StartInfo.RedirectStandardOutput = True

       myProcess.StartInfo.RedirectStandardInput = True
         myProcess.StartInfo.CreateNoWindow = True
         myProcess.Start()

     

    然後用 myProcess.StandardOutput.ReadLine() 來重導主控台程式的輸出到我的Daemon程式

    但是這樣只能讀到"字串"的輸出,例如(ABC一二三....)

    沒辦法讀到"控制"的輸出,例如主控臺程式裡面寫到:

    Console.Clear()                              // 清除畫面

    Console.CursorVisible = False    // 隱藏游標

    Console.SetCursorPosition(6, 2) // 設定由標位置

     

    請問要如何才能將主控台程式的輸出完整的重導到我的程式呢?

    又我的程式要傳送某一個功能鍵(鍵盤的上下左右、ESC等)到主控台程式又開怎麼做呢?

    ( 似乎也沒辦法用myProcess.StandardInput.WriteLine() 做 )

     

    先感謝替我解答的大大!

    2007年4月21日 上午 12:26

解答

  • 控制碼應該讀不到,因為輸出到 Console 上的畫面已經被命令提示字元過濾過一次了。

     

    我覺得你需要的是 VPN Server 。

     

    此外,你既然可以用 TcpListener 接聽遠端的要求進來,就直接跨個 TcpClient 幫忙撥接,兩邊對傳,你的程式做橋接,這樣還比 Process 管理方便多了。

    2007年4月21日 上午 02:45
    版主

所有回覆

  • 控制碼應該讀不到,因為輸出到 Console 上的畫面已經被命令提示字元過濾過一次了。

     

    我覺得你需要的是 VPN Server 。

     

    此外,你既然可以用 TcpListener 接聽遠端的要求進來,就直接跨個 TcpClient 幫忙撥接,兩邊對傳,你的程式做橋接,這樣還比 Process 管理方便多了。

    2007年4月21日 上午 02:45
    版主
  • 這個程式的Client端是PDA,用PDA上的Telnet軟體連線,

    所以可能不適合用VPN

     

    第二個方法的架構小弟看不太懂,

    可以請大大再說明詳細一點嬤?

    目前已經用 TcpListener 接聽遠端的要求進來,如何 "跨個 TcpClient 幫忙撥接,兩邊對傳,你的程式做橋接"

    是指Daemon和主控台程式之間也用TcpListener 做連結傳資料嗎?

     

    (題外話:剛剛去璉大的BLOG逛了一下,發現你是我徐匯的學長耶!)

    2007年4月21日 下午 12:06
  • 我本來的意思是說,你開幾個 tcpListener ,就開幾個 tcpClient ,連線時,先送目標伺服器位置、Port ,讓 tcpClient 去連,剩下的,你的 PDA 送什麼過來,就用 tcpClient 轉送到 telnet server 去,telnet server 送什麼回來,就轉回給 pda 即可。

     

    我是徐匯人沒錯,我曾是沒人理的群濟社社員,也許是因為唸的大學是在南部吧...

    2007年4月21日 下午 02:27
    版主
  • 看懂了,謝謝~
    2007年4月21日 下午 03:01