我认为是因为你的程序没有进行Telnet协议的子协商过程,服务器才发出一堆问号:
基于TELNET协议的DELPHI程序与LINUX主机通信的实现
pitts (痛并快乐着)
......
(2)协商通信
一旦连接成功,主机将发回请求信息,从而进入Telnet协议的子协商过程。子协商过程,
是客户与服务器之间以协议约定好的命令结构形式的数据流进行相互通信的过程。这种子协商
过程的命令结构如图所示:
这些命令符都是八比特的ASCII字符,命令之间没有任何间隔符,这些ASCII字符可以用
ord()和chr()函数来进行字符与数字之间的转换。
建立接收缓冲区,调用recv()或recvfrom()函数等待服务器发送的信息。通常,服务器
将发送如下子协商命令:
IAC DO TERMINAL-TYPE (终端类型)
IAC DO TERAMINAL-SPEED(终端速率)
IAC DO X-DISPLAY-LOCATION(显示方式)
IAC DO ENVIRONMENT(环境)
建立发送缓冲区,根据上述信息进行回应,调用char()函数,将命令代码转换为ASCII字符
填入发送缓冲区,注意在“选项”中出现的非命令字符的字符串(如表示终端类型的字符串)
要以NVT ASCII String形式出现。调用send()或sendto()函数发送至服务器,并等待服务器的
回应信息,此后按照Telnet协议进一步进行子协商。例如,可以这样进行回应:
IAC DO TERMINAL-TYPE(协商终端类型)
IAC DONT TERMINAL-SPEED(不协商终端速率)
IAC DONT X-DISPLAY-LOCATION(不协商显示方式)
IAC DONT ENVIRONMENT(不协商环境)
一旦子协商命令执行完毕,服务器将发送服务器本身的版本信息和登录信息