2011-04-24 99 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