linux socket 收到乱码,我得socket程序有问题,读取telnet 23端口返回乱码!why??? (50分)...

我认为是因为你的程序没有进行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(不协商环境)

一旦子协商命令执行完毕,服务器将发送服务器本身的版本信息和登录信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值