基于TELNET协议的DELPHI程序与LINUX主机通信的实现
1.Telnet协议简介
Telnet协议的目的是提供一种通用的、八比特位定向通信手段,其基本功能是通过网络提供远程登录或虚拟终端能力。Telnet协议可以用来进行终端-终端的通信(连接)或进程-进程的通信(分布计算)。
Telnet连接实际上是一种TCP/IP连接,它通过在TCP传输数据流中嵌入Telnet控制信息来实现连接,Telnet通过TCP端口23提供服务。它的建立与实现基于三种思想:“网络虚拟终端”的概念;子协商操作原理;对称终端和过程。
2.环境配置
Delphi提供了一种全新的Windows应用程序开发方法,它速度快,具有强大且容易使用的可视化开发环境,具有领先的数据库技术和强大的网络编程能力。
使用Delphi开发工具(Object Pascal语言),利用Telnet协议实现与Linux主机的通信,首先要建立环境,即Linux与Windows
95联网。这里,Windows 95环境下的Delphi应用程序将作为客户端,而Linux操作系统将作为服务器,它们之间的关系如下图。
(1)安装Linux
按操作指南安装Linux操作系统。Linux是Unix操作系统的一个变种,它采用了微内核技术。
(2)配置网络
1)启动Linux,并键入“root”以管理员身份登录。运行netconfig,根据屏幕提示配置网络的服务器名、域名、主机的IP地址、子网屏蔽及命名服务器IP地址。
2)修改rc.modules文件
此文件是Linux系统的资源配置模块文件,由于Linux并没有自动配置网络的功能,所以必须进行手工配置。
进入etc\rc.d目录,用vi命令编辑rc.modules文件。在Network族中,将适用自己的网卡处(如ne
IO=0xnn)前面的屏蔽位“#”去掉,然后修改IO端口(如IO=0x240)。键入qw命令保存修改,退出文件。此修改后的文件将被加入到Linux系统文件中,并在Linux启动时自动生效。重新启动Linux,将会看到以下的网络配置提示信息:
Network NE2000 IO=0x240,11
3)测试服务
为已物理连接的具有Windows 95操作系统的客户机添加TCP/IP协议,并配置好IP地址及标识。重新启动以使配置生效,在Linux操作系统下键入“ping+IP地址”来测试网络的连接,将会看到请求连接建立的时间等信息,与此同时,95已经通过TCP/IP协议连接成功,如要测试Telnet服务,只须在Linux服务器上执行Telnet命令即可。
3.网络编程(Delphi应用程序与Linux主机通信)
目前,软件领域流行的网络编程的资料及代码范例,基本上都是基于C语言开发的。C语言是一种半高级语言,对于指针、内存操作有极大的灵活性,而Pascal是一种高级语言,其内部具有许多保护机制,避免了许多影响操作系统正常运行的误操作。
由C向Object Pascal(Delphi编程语言)的代码转化并不是非常困难的事情,困难在于C语言结构与Object
Pascal不同,类型、变量的表示也相差很大,这就需要熟悉C语言结构与Object
Pascal的联系与区别,特别是必要的数据结构的表示方法。
下表列出作者在实现Telnet协议时,通过实际摸索得出的C语言与Object
Pascal在数据结构与语法表示方面在网络编程中的差异:
Delphi网络编程支持Winsock,其中的许多函数均可以直接调用,但要注意函数调用过程中Pascal语言的参数传递风格,尤其要小心指针参数的正确使用(如表中所列)。
(1)建立连接
由于Object Pascal支持Winsock,在程序定义阶段的uses部分加入Winsock的说明,这样就可以使用Winsock中的函数。
直接启动WSAStartup()。将套接字s设为Tsocket类型,调用socket()创建套接字。初始化socket地址(Psockaddr类型),设置Linux服务器的IP地址。
调用connect函数建立连接,其主机结构参数由初始化的Psockaddr结构决定。此中要注意网络字节顺序及数目,如运用不当,很可能无法建立连接。
(2)协商通信
一旦连接成功,主机将发回请求信息,从而进入Telnet协议的子协商过程。子协商过程,是客户与服务器之间以协议约定好的命令结构形式的数据流进行相互通信的过程。这种子协商过程的命令结构如图所示:
这些命令符都是八比特的ASCII字符,命令之间没有任何间隔符,这些ASCII字符可以用ord()和chr()函数来进行字符与数字之间的转换。
建立接收缓冲区,调用recv()或recvfrom()函数等待服务器发送的信息。通常,服务器将发送如下子协商命令:
IAC DO TERMINAL-TYPE (终端类型)
IAC DO TERAMINAL-SPEED(终端速率)
IAC DO X-DISPLAY-LOCATION(显示方式 [1] [2] 下一页
|