如何使用C/Objective C获得telnet结果?

如何使用C/Objective C获得telnet结果?,c,objective-c,telnet,C,Objective C,Telnet,以下是telnet网站: telnet://202.85.101.136:8604/ P>香港公共图书馆,我可以编写一些程序来获取Telnet服务的字符串/结果,并发送C/Object C的请求吗?太赫兹辐射。确定这是可能的。Telnet是一个非常简单的协议,您只需打开一个TCP套接字并将其连接到该IP和端口。当您第一次连接时,telnet服务器将使用RFC854中定义的二进制协议发送一些协商请求,您的客户端将对此做出响应。一旦协商完成,您只需发送和接收ASCII数据即可进行通信,通常一次一行

以下是telnet网站:

telnet://202.85.101.136:8604/


P>香港公共图书馆,我可以编写一些程序来获取Telnet服务的字符串/结果,并发送C/Object C的请求吗?太赫兹辐射。

确定这是可能的。Telnet是一个非常简单的协议,您只需打开一个TCP套接字并将其连接到该IP和端口。当您第一次连接时,telnet服务器将使用RFC854中定义的二进制协议发送一些协商请求,您的客户端将对此做出响应。一旦协商完成,您只需发送和接收ASCII数据即可进行通信,通常一次一行


对于一个简单的“从主机获取一些数据”telnet会话,如果您不想进行真正的交互式会话,那么有时只需接受所有服务器的协商设置,就可以避免实现整个协商协议。要做到这一点,只需寻找服务器以:0xFF 0xFD xx的格式向您发送几个3字节的命令,这基本上就是服务器告诉您“我希望您使用选项X”,只需使用0xFF 0xFB xx对此作出响应,这基本上就是您同意服务器的任何要求。然后,当您通过协商时,您只需通过套接字读取接收行,并通过套接字写入发送命令。

如果您的系统上已经有telnet程序,您可以使用它来完成所有连接工作。这里有一个gnu/Linux程序,可以作为起点使用

它用于执行系统的telnet命令。然后它只是从管道中读取所有数据(如果您只是从shell中自行执行telnet命令,则为stdout)并打印它。当没有更多的数据可读取时,它将退出

您可以通过以
rw
模式而不是
r
打开管道,然后像写入任何其他文件一样向服务器发送数据。例如,您可以有条件地执行一些操作,比如扫描输入的
用户名:
,然后发送用户名字符串

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
        const char *cmd = "telnet 202.85.101.136 8604";
        char buffer[256];

        FILE *pipe = popen(cmd, "r");
        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);

        return 0;
}
#包括
#包括
int main(int argc,char*argv[])
{
const char*cmd=“telnet 202.85.101.136 8604”;
字符缓冲区[256];
文件*pipe=popen(cmd,“r”);
如果(!pipe){perror(“popen”);退出(-1);}
while(fgets(buffer,sizeof(buffer),pipe)!=NULL&&
!feof(管道))
{
if(铁(管){perror(“fgets”);break;}
/*在这里,您可以对数据执行任何操作*/
printf(“%s”,缓冲区);
}
pclose(管道);
返回0;
}
如果您使用的是Windows,说明了popen的替代方案


还有一个名为的程序,可以帮助您完成类似的工作。

问题被标记为Objective-C,因此很可能不是Windows。或者标记应用不正确。我正在尝试执行此操作,但仍然无法从服务器获取输出。如果你有机会,请看一下这里(),我也很难理解一些选择码,你知道35和39是什么吗?如何将协商设置为我想要的选项,而不是我的服务器在连接时吐出的内容。