我希望能够在C中实现一个telnet服务器。我该如何进行?我应该查看哪些RFC?这对我很重要,我会感激任何帮助。
如果只是进行基本的telnet(只需连接到端口并回显字节),则没有太多要做的。从套接字读取数据,处理它(在回显服务器中不做任何操作),然后返回结果。即使不了解任何RFC,您也可以实现一个简单的MUD样式服务器。
但是,如果您真的关心RFC,RFC 854可能是一个起点。
我建议安装Wireshark来监视现有Telnet服务器上的Telnet流量。然后查看日志,您可以更好地了解服务器如何与客户端通信。如果您不理解通过电线传输的任何命令,请使用RFC作为参考。
了解套接字 API 的内部工作原理非常有用,因为它经常被高级语言导出时只进行了微小的更改。
话虽如此,您可能希望使用 GLib 提供的事件循环支持,并使用相关的网络库 GNet。
以下是如何使用 GNet 在端口 4000 上打开套接字,然后关闭对其进行的每个连接。这里有一点魔法,因为服务器在创建时将自己注册到默认主上下文中。
#include <glib.h>
#include <gnet.h>
void client_connect(GServer G_GNUC_UNUSED *server, GConn *conn, gpointer G_GNUC_UNUSED user_data){
g_print("Connection from %s\n", conn->hostname);
gnet_conn_disconnect(conn);
gnet_conn_unref(conn); conn = NULL;
}
int main(void){
GMainLoop *loop = g_main_loop_new(NULL, FALSE);
GServer *server;
gnet_init();
server = gnet_server_new(NULL, 4000, client_connect, NULL);
g_main_loop_run(loop);
g_main_loop_unref(loop); loop = NULL;
return 0;
}