第 1 章 - Azure RTOS NetX Duo Telnet 简介

Azure RTOS NetX Duo Telnet 是一种专用于在 Internet 上的两个节点之间传输命令和响应的协议。 Telnet 是一种简单的协议,它利用可靠的传输控制协议 (TCP) 服务来执行其内容传输功能。 因此,Telnet 是一种高度可靠的传输协议。 Telnet 也是最常用的应用程序协议之一。

Telnet 要求

为了能够正常运行,NetX Duo Telnet 包要求已创建好 NetX Duo IP 实例。 此外,必须在同一个 IP 实例上启用 TCP。 NetX Duo Telnet 包的 Telnet 客户端部分没有附加要求。

NetX Duo Telnet 包的 Telnet 服务器部分有一个附加要求。 它需要拥有对 TCP 常见端口 23 的完全访问权限才能处理所有客户端 Telnet 请求。

Telnet 约束

NetX Duo Telnet 协议实现 Telnet 标准。 但 Telnet 命令的解释和响应(由值为 255 的字节指示)是应用程序的责任。 nxd_telnet_client.h 和 nxd_telnet_server.h 文件中定义了各种 Telnet 命令和命令参数。

Telnet 通信

如前所述,Telnet 服务器使用常见的 TCP 端口 23 来处理客户端请求。 Telnet 客户端可以使用任何可用的 TCP 端口。

Telnet 身份验证

Telnet 身份验证是应用程序的 Telnet 服务器回调函数的责任。 应用程序的 Telnet 服务器“新建连接”回调通常会提示客户端输入名称和/或密码。 然后,客户端负责提供相关信息。 之后,再由服务器处理“接收数据”回调中的信息。 在这种情况下,应用程序服务器代码必须对信息进行身份验证并确定其是否有效。

Telnet“新建连接”回调

每当接收到新的 Telnet 客户端请求时,NetX Duo Telnet 服务器都将调用应用程序指定的回调函数。 当通过 nx_telnet_server_create 函数创建 Telnet 服务器时,应用程序将指定回调函数。 “新建连接”回调的典型操作包括向客户端发送横幅或提示。 很可能包含登录信息提示。

原型

void  telnet_new_connection(NX_TELNET_SERVER *server_ptr, 
                            UINT logical_connection);

输入参数

  • server_ptr:指向调用的 Telnet 服务器的指针。
  • logical_connection:Telnet 服务器的内部逻辑连接。 应用程序可将其用作缓冲区的索引和/或特定于每个客户端连接的数据结构。 其值的范围为 0 到 NX_TELNET_MAX_CLIENTS - 1。

Telnet“接收数据”回调

每当接收到新的 Telnet 客户端数据时,NetX Duo Telnet 服务器都将调用应用程序指定的回调函数。 当通过 nx_telnet_server_create 函数创建 Telnet 服务器时,应用程序将指定回调函数。 “新建连接”回调的典型操作包括回显数据和/或分析数据,并提供数据,将其用作从客户端解释命令的结果。

请注意,此回调例程还必须发送提供的数据包。

原型

void  telnet_receive_data(NX_TELNET_SERVER *server_ptr, 
                          UINT logical_connection, NX_PACKET *packet_ptr);

输入参数

  • server_ptr:指向调用的 Telnet 服务器的指针。
  • logical_connection:Telnet 服务器的内部逻辑连接。 应用程序可将其用作缓冲区的索引和/或特定于每个客户端连接的数据结构。 其值的范围为 0 到 NX_TELNET_MAX_CLIENTS - 1。
  • packet_ptr:指向包含客户端数据的数据包的指针。

Telnet“终止连接”回调

只要 Telnet 客户端终止连接,NetX Duo Telnet 服务器就会调用应用程序指定的回调函数。 当通过 nx_telnet_server_create 函数创建 Telnet 服务器时,应用程序将指定回调函数。 “终止连接”回调的典型操作包括清理与逻辑连接关联的任何特定于客户端的数据结构。

原型

void  telnet_end_connection(NX_TELNET_SERVER *server_ptr, 
                            UINT logical_connection);

输入参数

  • server_ptr:指向调用的 Telnet 服务器的指针。
  • logical_connection:Telnet 服务器的内部逻辑连接。 应用程序可将其用作缓冲区的索引和/或特定于每个客户端连接的数据结构。 其值的范围为 0 到 NX_TELNET_MAX_CLIENTS - 1。

Telnet 选项协商

NetX Duo Telnet 服务器支持一组有限的 Telnet 选项:“回显”和“禁止继续操作”。

若要启用此功能,则不得定义 NX_TELNET_SERVER_OPTION_DISABLE。 默认情况下未定义此选项。 Telnet 服务器会在 nx_telnet_server_create 服务中创建一个数据包池,它通过该池来分配数据包,从而将 Telnet 选项请求发送到客户端。 请参阅“配置选项”,了解如何为此数据包池设置数据包有效负载 (NX_TELNET_SERVER_PACKET_PAYLOAD) 和数据包池大小 (NX_TELNET_SERVER_PACKET_POOL_SIZE)。 当调用 nx_telnet_server_delete 服务时,它将删除此数据包池。

与 Telnet 客户端建立连接后,如果客户端未收到来自客户端的选项请求,则它会向客户端发送这组 Telnet 选项:

  • 回显
  • 不回显
  • 禁止继续操作

收到来自客户端的 Telnet 数据时,Telnet 服务器将检查第一个字节是否为“IAC”代码。 如果是,它将处理客户端数据包中的所有选项。 不在上述列表中的选项将被忽略。

默认情况下,如果未定义 NX_TELNET_SERVER_OPTION_DISABLE 并且需要传输 Telnet 选项命令,则 Telnet 服务器会创建自己的内部数据包池。 Telnet 服务器数据包池由 NX_TELNET_SERVER_PACKET_PAYLOAD 和 NX_TELNET_SERVER_PACKET_POOLSIZE 定义。 但如果定义了 NX_TELNET_SERVER_USER_CREATE_PACKET_POOL,则应用程序必须创建 Telnet 服务器数据包池,然后通过调用 _nx_telnet_server_packet_pool_set 将其设置为 Telnet 服务器数据包池。 请参阅第 3 章“Telnet 服务的说明”,了解此功能的更多详细信息。

与 NetX Duo Telnet 服务器不同,NetX Duo Telnet 客户端任务线程不会自动发送和响应从 Telnet 服务器收到的选项。 此操作必须由 Telnet 客户端应用程序完成。

Telnet 多线程支持

你可以同时从多个线程调用 NetX Duo Telnet 客户端服务。 但对于特定 Telnet 客户端实例的读取或写入请求,应在同一线程中按顺序发出。

Telnet RFC

NetX Duo Telnet 符合 RFC854 和相关的 RFC。