搜档网
当前位置:搜档网 › TCP_IP协议下网络编程技术及其实现

TCP_IP协议下网络编程技术及其实现

收稿日期:2002-04-20

作者简介:周炎涛(1963-),男,湖南常德人,高级工程师,主要从事计算机科研与教学。

文章编号:1671-654(2002)03-0122-03

TCP/IP 协议下网络编程技术及其实现

周炎涛,李立明

(湖南大学,湖南长沙410012)

摘 要:建立在传输层协议上的抽象数据结构socket 作为网络中数据交换的排队点,是T CP/I P 网络最为通用的API 。文章在介绍T CP 协议客户端和服务器端进程通信流程和具体实现的基础上,以Delphi 环境为编程语言说明了在Window s 下使用socket 进行网络编程的

方法和特点。基于事务处理的socket 网络编程技术可应用在分布式系统进程通信中,是Internet 上进行应用开发最为通用的API 。

关键词:套接字;Delphi;T CP/IP 协议;网络编程中图分类号:T N 915.04文献标识码:A

前言

现代操作系统中,用户程序以进程方式共享地占用系统资源,系统中每个进程在自己的地址范围内以线程为执行单位运行。为保证相互通信的进程之间既互不干扰、又协调一致地工作,对本机进程之间的通信,操作系统提供如U nix BSD 的管道(pipe)、命名管道(named pipe)FIFO 和软中断信号,以及Unix System V 的消息(message)、共享存储区(shared memory )和信号量等进程间通信IPC 机制[1]

。对于分布式系统中的网间进程,计算机不共享存储器,为提供进程间通信的一般方法和使用复杂协议、实现不同主机间通信,通常使用不同的通信原语,通过数据的交换来实现。进程间通信原语集分为 基于消息传递; 基于远程过程调用RPC; 基于事务处理。对于基于事务处理的分布式系统,消息是在套接字socket(消息源和目标)之间进

行交换的[2]。

抽象地说,socket 是一种双向通信接口;实际

上,socket 是一种数据结构,用以创建一条在没有互联的进程间发送、接受消息的通道(连接点)。一对互联的socket 提供通信接口,使两端可以传输数据。与文件操作一样,每个打开的socket 都对应一个socket 描述符整数,它指向这个socket 数据结构。socket 是建立在传输层协议(主要是T CP 和UDP)上的一种套接字规范,最初是由美国加州Berkley 大学提出[3],为U nix 操作系统开发的网络通信接口,它定义两台计算机间进行通信的规范(也是一种编程规范),如果说两台计算机是利用一个 通道 进行通信,那么这个 通道 的两端就是两个套接字。socket 屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP 协议软件和实现了socket 规范的计算机之间的通信成为可能。socket 接口是TCP/IP 网络最为通用的API,也是在Internet 上进行应用开发最为通用的API 。

socket 是网络节点上可访问的逻辑实体,由在给定节点上惟一的socket 号标识。一个分布式系统中,socket 网间地址包含socket 号、(socket 所在)节点标识符以及(节点所在)网络号。OSI 中,网络层及其以下各层又称通信子网,只提供点到点通信,没有程序和进程的概念,而传输层实现的是 端-端 通信,引进网间进程通信概念,提供了不同连接服务方式。socket 的出现使程序员能非常方便地访问TCP/IP 协议。

1 socket 使用

第32卷 第3期 航空计算技术 Vol.32No.3 2002年9月 Aeronautical Com puter Technique Sep.2002

进程间要进行通信,就象先装上电话一样,要建立一个socket,socket()命令就完成这项工作。

socket有几种通信类型,通过选择socket的地址格式来完成Unix域和Internet域的设置,如同电话有音频和脉冲两种形式一样,这两个重要的选项分别是AF_UNIX和AF_INET:AF_U NIX就象UNIX 路径名一样识别socket,这种形式对于在同一台机器上的IPC很有用;而AF_INET使用象202.103.

96.68的IP地址格式。对T CP/IP协议网络应使用AF_INET方式。

使用socket()必须提供的参数还有socket的类型。两种基本的类型是SOCK_STREAM和SOCK_ DGRAM。SOCK_ST REAM表明数据象字符流(如电话交谈)一样通过socket;而SOCK_DGRAM则表明数据是数据报datagrams的形式(如寄信)。此外还有raw socket提供给那些有超级用户存取权限、想设计和实现自己的网络协议的用户使用。本文以SOCK_STREAM socket为例,这种socket是可靠的,数据传送和其发送时按时序一致,支持双向(全双工)的通信,并且是面向连接的。

对于网络中最常见、典型的Unix应用程序Client/Server模式,使用socket进行进程通信,sock et成为一个数据交换的排队点(queuing point),此时对客户端进程使用socket()调用得到一个socket描述符,然后使用connect()向指定的server上的指定端口发起连接;而服务器端进程使用socket()调用也得到一个socket描述符,然后使用bind()调用将一个名字(如Internet地址)与该socket描述符连接起来,accept()调用则等待上述客户端发出的连接。

一旦有客户端发出连接,使用TCP协议时客户和服务器的通信如图1所示:accept()接受客户的地址信息并返回一个新的socket描述符,该描述符与原先的socket有相同的特性,可以使用send()和recv()调用与其他进程通信,也可以使用一般文件操作read()和write()对socket描述符进行读写,从而实现与其他进程通信。

T CP/IP协议网络中,进程通信间相互作用模式为Client/Server模式,TCP是面向连接的传输协议,若使用无连接的UDP协议通信流程略有不同。在使用中,面向连接协议的socket编程模型应用最为广泛,因为面向连接协议提供了一系列的数据纠

错功能,可以保证在网络上传输的数据及时、无误地到达对方。

图1 面向连接时客户端和服务器端通信流程

具体实现时,如图2所示,服务器端进程首先在约定的端口号处联编一个监听socket,负责监听客户端进程的请求,用accept()循环从接受队列里依次取出每一个客户进程。对每一个客户进程,连接建立后生成新的socket,此时服务器fork()出一个子进程专门负责处理该客户,父进程则关闭新的socket,继续处理下一个客户进程。而服务器监听用的socket对fork出的子进程无用,所以子进程将其关闭,用产生的新socket与客户交换信息,直到对方关闭此连接,子进程终止。

图2 T CP协议网络客户-服务器并发实现

为防止子进程进入僵尸状态[4],可以使用w ait pid()来清除终止的子进程。

由于篇幅有限,客户端/服务器端程序略。上述程序设计结构如果要解决服务器主机崩溃或网络连接不通等问题,还需要进一步地完善。

2 Delphi环境下网络编程

socket通信在Windows中以排队的形式由操作系统处理,接收方和发送方相互协同工作,否则会造成数据丢失。和所有的通信编程一样,socket编

123

2002年9月 周炎涛等:TCP/IP协议下网络编程技术及其实现

程也遵循数据分包传送这一基本规则。也就是说,在socket编程中,每次发送和接收一个包,以保证数据传输的安全性和稳定性,同时也不至于过多地占用系统资源。Winsocket是在Windows进行网络通信编程的API接口,它是从Berkeley socket扩展而来的[5],也是Windows网络编程的事实标准。

如果从最原始开始编写分布式系统进程通信的程序,我们必须对相关的网络协议、系统的低层知识以及网络软硬件技术有全面的熟悉和掌握。而在Window s95/98,Window s NT下进行Winsocket开发,我们可以使用很多编程语言,如VC++,Java, Delphi,VB等。它们对原来的Window s Sockets库函数进行了一系列封装,继而产生了很多类,封装着有关Socket的各种功能,使编程变得更加简单。以下以Delphi环境下实现Winsocket应用为例说明。

Delphi中Winsocket分为两种组件:ClientSock et和ServerSocket,它们分别作为客户端和服务器端的组件。即在客户端程序中采用ClientSocket组件,而在服务器端则采用ServerSocket组件。通过这两种组件之间的通信,再加上辅助的应用程序代码,就可以实现一个简单的通信程序。当然在客户端程序中再引入ServerSocket的话,那么客户端程序就可以充当服务器,对其他的客户端程序的请求进行响应。

对于ClientSocket组件,它用于请求方。也就是说,它的动作是主动地建立连接;而ServerSocket 组件用于响应方,其动作是侦听以及被动接受连接。

组件ClientSocket的属性是相对静态的,它和ServerSocket之间只是连接和断开的关系。并且仅当ServerSocket对其接受才表示建立连接。

组件ServerSocket的属性是动态的。伴随着一个新的ClientSocket与之建立连接的同时,就会产生一个新的Socket与该ClientSocket对应,保持单独的连接,进行单独的通信。因此,在同一个ServerSocket中,可以与多个ClientSocket保持同时连接和各自独立的通信。ServerSocket的属性Socket.ActiveConnections用于表示客户端连接的数量;属性Socket.Connections[Index]则用于访问单个与ClientSocket连接的socket。

正是这样的结构,才使得WinSocket技术能够稳定实现一个服务程序向多个客户端提供服务。Delphi中编写Winsocket程序的步骤分为: Winsocket组件属性设置; 建立与远程计算机的连接; 计算机间的数据传输。

虽然Delphi使用Winsocket组件十分方便,但是要真正熟练运用它来实现复杂的网络应用程序的开发,必须进一步研究,掌握其它如NMPOP3、NMU DP、NMFTP等网络组件的编程技巧。

3 结束

Socket提供用户处理通信的方法,使得相关进程可以存在分布式系统中,T CP/IP网络环境下的应用程序是通过网络(应用)编程界面(socket)实现的,网间应用程序之间的作用方式为Client/Server 模式。本文在对面向连接的T CP/IP网络协议的客户端和服务器端进程通信流程和实现介绍的基础上,以Delphi环境为编程语言说明了在Windows下使用socket进行网络编程的方法和特点。在此基础上我们可以使用Internet应用层协议进行多个并行网络连接的实现。

进入新世纪,计算机网络持续而高速地发展,其中基于TCP/IP协议网络已成为计算机之间组网的常见形式,基于TCP/IP的网络编程也相应地广泛应用。目前大多数远程进程间通信代码是用socket 编写的,实际使用中用socket传输信息不是独立的,它应该应用于多线程的处理环境[6],有关这方面的应用将在以后加以讨论。

参考文献:

[1] John Shapley Gray.Interprocess Communicatio ns in U

nix,Second Ediition[M].Englewood Cliffs,NJ:P rentice

Hall,1998.

[2] 尹俊文等.分布式操作系统[M].长沙,国防科技大学

出版社,2000.

[3] 阮戈等.最新U nix程序设计与编程技巧[M].北京,清

华大学出版社,2001.

[4] William Stallings.O perating Systems Internals and Prin

ciples,T hir d Editors[M].Englewood Cliffs,NJ:P rentice

Hall,1998.

[5] M artin Hall Etc.Window s sockets-An Open Inter face

for Networ k Prog ramming under M icrosoft Windows

[M].U SA:Winsock G roup,January,1993.

[6] 李冠一等.基于W insock实现Internet协议多线程连接

的关键技术[J].计算机应用,2001(12).

(下转128页)

read()、w rite()函数来交换数据。

10)服务进程和客户进程可通过调用shutdow n ()和colse()关闭套接字上的所有发送和接收操作,撤销套接字并中断连接。

随着Internet/Intranet技术在全球范围内的广泛采用,结合应用系统向Internet的延伸成为通信中间件的一个发展动向,基于TCP/IP实现的通信中间件向Internet的延伸与Internet的结合有独特的优势。由于通信中间件自身的技术特点,在构造许多大型应用时,如并发控制、可靠传输、负载均衡等方面尚有广阔的发展空间。总之,通信中间件技术作为软件行业的一个新的分支,正在得到迅猛发展,也将把分布式应用的带到一个新的境界。

参考文献:

[1] 林宇,郭凌云.L inux网络编程技术[M].北京:人民邮

电出版社,1999.

[2] 陈刚等.消息中间件技术[J].计算机世界报,2000(9).

[3] (美)Richard Stevens.T CP/I P详解.第二卷[M].北京:

实现机械工业出版社,1998.

Impletation of Message-oriented Middleware Based on TCP/IP

YANG Yong wei,ZHENG You chai

(X idian Unviersity,X i an710071,China)

Abstract:message-oriented middlew are is softw are based on three t ier client/server architec ture and supports telecommunication betw een the client and server applicat ions.T here are three types on M essage-oriented middlew are:Remote Procedure Call(RPC),Session Programming and M essage Queen Interface.In this paper,it is illustrated that related technical on M essage-oriented middlew are,including its application surrounding,working priciples,achieving process and impletat ion based on TCP/IP.

Key words:message-oriented middleware;client;server;process communication;TCP/IP

(上接124页)

Network Programming T echnique and Implementation

in TCP/IP Protocol

ZHOU Yan tao Li Li ming

(H unan Unvier sity,Changsha410012,China)

Abstract:As a queuing point of data exchange in netw ork,data structure socket based on transport layer protocol is the commonest API.T his article introduced process communication and its realization of Client/Server process in T CP protocol;show ed t he network programming method and property using socket in Windows,taking Delphi environment as an example.The socket net w ork programming technique based on transaction can be used in interprocess communication of distributed system,and is the commonest API in application of Internet.

Key words:socket;Delphi;TCP/IP protocal;network programing

相关主题