2011-04-24 226 views
1

我正在嘗試在C++中建立本地Telnet會話併發送命令/接收數據。現在我有:popen telnet中的子命令

const char *cmd = "telnet 127.0.0.1 2006"; 
char buffer[256]; 

FILE *pipe = popen(cmd, "rw"); 
//if(!pipe) { perror("popen"); exit(-1); } 

while(fgets(buffer, sizeof(buffer), pipe) != NULL && 
     !feof(pipe)) 
{ 
    if(ferror(pipe)) { perror("fgets"); break; } 

    /* Here you do whatever you want with the data. */ 
    printf("%s", buffer); 
} 

pclose(pipe); 

這是打開telnet連接。我需要發送如下命令:「/ neighbors」,然後接收它將返回的數據。理想情況下,會話將保持打開狀態,我會每隔20秒左右重新查詢「/ neighbors」。

我想我需要用fork()創建一個子進程,但我對這個過程很陌生。

回答

3

使用telnet似乎是一個相當迂迴的方式來做到這一點。您是否考慮過使用常規套接字來與遠程進程通話?例如,試試這個guide to socket programming

+1

千分之一。從telnet和popen開始,現在即將使用fork,OP將會遇到十幾個問題。 – 2011-04-24 23:09:22

+0

我必須使用telnet,因爲我正在運行一個終端應用程序,我沒有創建只輸出到telnet的數據,我需要將它拉入C++ – alyx 2011-04-24 23:12:57

+0

'telnet'程序只是將終端會話連接到遠程socket服務器。所有'telnet'都使用常規套接字API函數來建立與服務器的連接。服務器不知道什麼程序正在進行連接。因此,您可以使用套接字API函數將您自己的*連接到服務器。 – 2011-04-24 23:14:41