TCP_IP协议下网络编程技术及其实现.pdf
《TCP_IP协议下网络编程技术及其实现.pdf》由会员分享,可在线阅读,更多相关《TCP_IP协议下网络编程技术及其实现.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、收稿日期:2002-04-20作者简介:周炎涛(1963-),男,湖南常德人,高级工程师,主要从事计算机科研与教学。文章编号:1671-654(2002)03-0122-03TCP/IP协议下网络编程技术及其实现周炎涛,李立明(湖南大学,湖南 长沙410012)摘 要:建立在传输层协议上的抽象数据结构socket作为网络中数据交换的排队点,是TCP/IP网络最为通用的API。文章在介绍TCP协议客户端和服务器端进程通信流程和具体实现的基础上,以Delphi环境为编程语言说明了在Windows下使用socket进行网络编程的方法和特点。基于事务处理的socket网络编程技术可应用在分布式系统进程
2、通信中,是Internet上进行应用开发最为通用的API。关键词:套接字;Delphi;TCP/IP协议;网络编程中图分类号:TN915.04文献标识码:A前言现代操作系统中,用户程序以进程方式共享地占用系统资源,系统中每个进程在自己的地址范围内以线程为执行单位运行。为保证相互通信的进程之间既互不干扰、又协调一致地工作,对本机进程之间的通信,操作系统提供如Unix BSD的管道(pipe)、命名管道(named pipe)FIFO和软中断信号,以及Unix System V的消息(message)、共享存储区(shared memory)和信号量等进程间通信IPC机制1。对于分布式系统中的网间
3、进程,计算机不共享存储器,为提供进程间通信的一般方法和使用复杂协议、实现不同主机间通信,通常使用不同的通信原语,通过数据的交换来实现。进程间通信原语集分为 基于消息传递;基于远程过程调用RPC;基于事务处理。对于基于事务处理的分布式系统,消息是在套接字socket(消息源和目标)之间进行交换的2。抽象地说,socket是一种双向通信接口;实际上,socket是一种数据结构,用以创建一条在没有互联的进程间发送、接受消息的通道(连接点)。一对互联的socket提供通信接口,使两端可以传输数据。与文件操作一样,每个打开的socket都对应一个socket描述符整数,它指向这个socket数据结构。s
4、ocket是建立在传输层协议(主要是TCP和UDP)上的一种套接字规范,最初是由美国加州Berkley大学提出3,为Unix操作系统开发的网络通信接口,它定义两台计算机间进行通信的规范(也是一种编程规范),如果说两台计算机是利用一个“通道”进行通信,那么这个“通道”的两端就是两个套接字。socket屏蔽了底层通信软件和具体操作系统的差异,使得任何两台安装了TCP协议软件和实现了socket规范的计算机之间的通信成为可能。socket接口是TCP/IP网络最为通用的API,也是在Internet上进行应用开发最为通用的API。socket是网络节点上可访问的逻辑实体,由在给定节点上惟一的sock
5、et号标识。一个分布式系统中,socket网间地址包含socket号、(socket所在)节点标识符以及(节点所在)网络号。OSI中,网络层及其以下各层又称通信子网,只提供点到点通信,没有程序和进程的概念,而传输层实现的是“端-端”通信,引进网间进程通信概念,提供了不同连接服务方式。socket的出现使程序员能非常方便地访问TCP/IP协议。1socket使用第32卷 第3期 航 空 计 算 技 术 Vol.32 No.32002年9月 Aeronautical Computer TechniqueSep.2002进程间要进行通信,就象先装上电话一样,要建立一个socket,socket()命
6、令就完成这项工作。socket有几种通信类型,通过选择socket的地址格式来完成Unix域和Internet域的设置,如同电话有音频和脉冲两种形式一样,这两个重要的选项分别是AF-UNIX和AF-INET:AF-UNIX就象UNIX路径名一样识别socket,这种形式对于在同一台机器上的IPC很有用;而AF-INET使用象202.103.96.68的IP地址格式。对TCP/IP协议网络应使用AF-INET方式。使用socket()必须提供的参数还有socket的类型。两种基本的类型是SOCK-STREAM和SOCK-DGRAM。SOCK-STREAM表明数据象字符流(如电话交谈)一样通过so
7、cket;而SOCK-DGRAM则表明数据是数据报datagrams的形式(如寄信)。此外还有raw socket提供给那些有超级用户存取权限、想设计和实现自己的网络协议的用户使用。本文以SOCK-STREAM socket为例,这种socket是可靠的,数据传送和其发送时按时序一致,支持双向(全双工)的通信,并且是面向连接的。对于网络中最常见、典型的Unix应用程序Client/Server模式,使用socket进行进程通信,sock2et成为一个数据交换的排队点(queuing point),此时对客户端进程使用socket()调用得到一个socket描述符,然后使用connect()向指
8、定的server上的指定端口发起连接;而服务器端进程使用socket()调用也得到一个socket描述符,然后使用bind()调用将一个名字(如Internet地址)与该socket描述符连接起来,accept()调用则等待上述客户端发出的连接。一旦有客户端发出连接,使用TCP协议时客户和服务器的通信如图1所示:accept()接受客户的地址信息并返回一个新的socket描述符,该描述符与原先的socket有相同的特性,可以使用send()和recv()调用与其他进程通信,也可以使用一般文件操作read()和write()对socket描述符进行读写,从而实现与其他进程通信。TCP/IP协议网
9、络中,进程通信间相互作用模式为Client/Server模式,TCP是面向连接的传输协议,若使用无连接的UDP协议通信流程略有不同。在使用中,面向连接协议的socket编程模型应用最为广泛,因为面向连接协议提供了一系列的数据纠错功能,可以保证在网络上传输的数据及时、无误地到达对方。图1 面向连接时客户端和服务器端通信流程具体实现时,如图2所示,服务器端进程首先在约定的端口号处联编一个监听socket,负责监听客户端进程的请求,用accept()循环从接受队列里依次取出每一个客户进程。对每一个客户进程,连接建立后生成新的socket,此时服务器fork()出一个子进程专门负责处理该客户,父进程则
10、关闭新的socket,继续处理下一个客户进程。而服务器监听用的socket对fork出的子进程无用,所以子进程将其关闭,用产生的新socket与客户交换信息,直到对方关闭此连接,子进程终止。图2TCP协议网络客户-服务器并发实现为防止子进程进入僵尸状态4,可以使用wait2pid()来清除终止的子进程。由于篇幅有限,客户端/服务器端程序略。上述程序设计结构如果要解决服务器主机崩溃或网络连接不通等问题,还需要进一步地完善。2Delphi环境下网络编程socket通信在Windows中以排队的形式由操作系统处理,接收方和发送方相互协同工作,否则会造成数据丢失。和所有的通信编程一样,socket编3
11、212002年9月 周炎涛 等:TCP/IP协议下网络编程技术及其实现 程也遵循数据分包传送这一基本规则。也就是说,在socket编程中,每次发送和接收一个包,以保证数据传输的安全性和稳定性,同时也不至于过多地占用系统资源。Winsocket是在Windows进行网络通信编程的API接口,它是从Berkeley socket扩展而来的5,也是Windows网络编程的事实标准。如果从最原始开始编写分布式系统进程通信的程序,我们必须对相关的网络协议、系统的低层知识以及网络软硬件技术有全面的熟悉和掌握。而在Windows 95/98,Windows NT下进行Winsocket开发,我们可以使用很多
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCP_IP 协议 网络 编程 技术 及其 实现
限制150内