Linux环境下基于TCP的Socket编程浅析.pdf
《Linux环境下基于TCP的Socket编程浅析.pdf》由会员分享,可在线阅读,更多相关《Linux环境下基于TCP的Socket编程浅析.pdf(5页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、L i n u x 环境下基于T C P 的S o c k e t 编程浅析吴佩贤(绍兴文理学院计算机系浙江绍兴3 1 2 0 0 0)摘要:S o c k e t 适用于同一台计算机上的进程间通信,同时也适用于网络环境中的进程间通信。他已成为当前许多操作系统的网络A P I,也是网络操作系统中必不可少的基础功能。因特网为网络中的应用提供了2 种类型的服务:由T C P 协议提供的面向连接服务和由U D P 协议提供的无连接服务。随着L i n u x 操作系统的不断推广,L i n u x 环境下的S o c k e t 开发和研究一直是人们关注的热点。文章介绍了L i n u x 平台下的
2、S o c k e t 及其在T C P 协议下的编程原理,并通过一个用J a v a 编写的基于T C P 的客户服务器程序,描述了网络中不同主机上的两个进程之间的S o c k e t 通信机制。关键词:S o c k e t T C P I P;客户机服务器;进程;J a v a中图分类号:T P 3 1 6文献标识码:B文章编号:1 0 0 4 3 7 3 X(2 0 0 5)1 6 一0 5 3 一0 3A n a I y s i so fS o c k e tP r o g r a m m i n gT C P b a s e do nL i n u xW UP e i x i a
3、 n(C o m p u t e rS c i e 眦eD e p a r t m e n t S h a o x i n gU n i v e r s i t y,S h a o x i“g 3 1 2 0 0 0,C h i n a)A b s t r a c t:s o c k e ti ss u i t a b l ef o rc o m m u n i c a t i o nb e t w e e nt w op r o c e s s e sn o to n l yf r o monec o m p u t e rb u ta l s of r o mn e t w o r k N
4、 o wS 0 c k e ti sa na v a i l a b l en e t w o r k A P Io fm a n yO S,a tt h es a m et i m e,i ti sonen e c e s s a r yp a r to fn e t w o r k O S I n t e r n e tp r o v i d e sc o n n e c t i o n o r i e n t e ds e r v i c e(T C P b a s e d)a n dc o n n e c t i o n l e s ss e r v i c e(U D P b a s
5、 e d)S o c k e td e v e l o p m e n ta n ds t u d y i n go nL i n u xa r ea l w a y sc o n c e r n e dw h i l eL i n u xi si n n o v a t e do na n do n T h ep a p e ri n t r o d u c e st h eS o c k e ta n di t7sp r o g r a m m i n gp r i n c i p l eb a s e do nT C Pi nL i n u xe n v i r o n m e n t
6、B yu s i n gaT C P b a s e dc l i e n t s e r v e rp r o g r a mw h i c hi se d i t e di nJ a v a,i td e s c r i b e sS o c k e tc o m m u n i c a t i o nm e c h a n i s mb e t w e e nt h et w op r o c e s s e sf r o mt h ed i“e r e n tc o m p u t e r si nt h en e t w o r k K e y w o r d s:S o c k e
7、 t,T C P I P,c l i e n t s e r v e rIp r o c e s s;J a v aL i n u x 是一个诞生于I n t e r n e t 和W W W 的产品,他和网络密切相关。L i n u x 网络系统具有稳定、简易、高效、兼容性好等特点,并且支持多种网络协议,如I Pv 4,I Pv 6,X 2 5,I P X,N E T B I O S,D D P 等。套接字(S o c k e t)是介于网络应用层和传输层之间的编程接口,套接字接口提供了访问下层通信协议的大量系统调用和相应的数据结构。在L i n u x 中,套接字接口是应用程序访问下层的网
8、络协议的惟一方法。具体讲,套接字在用户级实现了两个应用程序之间的网络连接和数据交换,所以L i n u x 中的套接字意味着网络上的连接。套接字在T C P I P 网络模型中的地位如图l 所示。应用层网络层互联层物理层图1收稿日期l2 0 0 5 0 4 一0 5套接字1B S D 套接字接口s o c k e t 接口是为方便开发人员进行T C P I P 程序开发,而为T C P I P 协议所制定的一组应用程序接口。由于他最早应用于伯克莱大学的B S DU n i x 中,所以习惯上又称其为B S DS o c k e t(简称B S D)。一个套接字描述为一个通信连接的一端,在一个通
9、信连接中的两端通信程序应各自有一个套接字来描述他们自己那一端,不同主机中的两个进程通过各自的套接字发送和接收消息,从而实现进程间跨网络的通信。L i n u x 的套接字支持多种网络协议,不同类型网络协议的工作方式不同,所使用的地址格式也完全不同。对于各种网络协议而言,使用相同地址格式的几个协议称为一个协议地址簇,表1 列出了B S D 套接字的常见地址簇。表lB S D 套接字地址簇的主要类型地址簇类型时应的通信协议A F I N E TA F I P XA F U N I XA F A X 2 5A F A P P L E T A L KT C P I P 协议N o v e UI P X
10、 协议U n i x 内部套接字A x 2 5 协议套接字A P P L E T A L KD D S(M a c i n t o s h 机器用)L i n u x 将套接字地址簇抽象为统一的B S D 套接字接5 3 万方数据口,该接口是应用程序的开发接口,由各地址簇专有的软件支持。L i n u xB S DS o c k e t 支持以下常见套接字类型:(1)S O C K S T R E A M(数据流套接口):提供一个面向连接的双工顺序数据流传输和可靠的数据传输服务。这种套接字可以保证数据传输的可靠性,不会出现数据丢失、破损或重复出现等差错,而且通过流量控制避免发送的数据流超限。I
11、 n t e r n e t 地址中的T c P 协议支持流套接字。(2)S O C K D G R A M(数据报套接口):提供一个无连接和不可靠的双工数据传输服务。数据包以独立包形式被发送和接收。不对数据的传输提供无错保证,即数据可能被丢失、破坏,也可能被重复接收。I n t e r n e t 地址中的U D P协议支持这种套接字。(3)S O C K R A W(原始套接口):这种类型的套接字允许对低层协议如I P 或I C M P 直接访问,可以直接填充I P,T C P,U D P 或者I C M P 的包头,发送用户自己定义的I P 包或者I C M P 包。主要用于一些协议的开
12、发,在网络安全的抓包中有重要的应用。2L i n u x 平台下的S o c k e t 编程原理在L i n u x 中,S o c k e t 属于文件系统的一部分,网络通信可以被看作是对文件的读取。这使得用户对网络的控制极为方便,L i n u x 的许多特性都非常有助于网络编程:首先,L i n u x 拥有P O S I X 标准库函数,S o c k e t(),b i n d(),l i s t e n(),s e n d(),a c c e p t()这几个库函数可以方便地实现客户机服务器模型中数据的传送与接收。其次,L i n u x 的进程管理策略也非常适合服务器的工作环境
13、,L i n u x 中的每个进程都对应一个父进程,同时他也能创建多个子进程。在服务器端可以用父进程去侦听客户机的连接请求,当有客户机的连接请求发生时,父进程创建一个子进程去建立连接线路并与该客户机通信,而他本身可继续侦听其他客户机的连接请求,这样就可避免当有一个客户机与服务器建立连接后服务器就不能再与其他客户机通信的问题。最后,L i n u x 传承了U n i x 设备无关性这一优秀特性,即通过文件描述符实现了统一的设备接口:磁盘、显示终端、音频设备、打印设备甚至网络通信都使用统一的I O调用。这3 个特性大大方便和简化了L i n u x 环境下的网络程序设计。(1)S o c k e
14、 t 函数S o c k e t()用来创建套接口描述符,其格式声明为:i n tS o c k e t(i n td o m a i n,i n tt y p e,i n tp r o t o c 0 1)参数d o m a i n 说明网络程序所在的主机采用的通信协议,如A F I N E T(I Pv 4 协议),A F I N E T 6(I Pv 6 协议),A F L O C A L(U n i x 域协议);参数t y p e 指定套接口类型(数据流套接口、数据报套接口、原始套接口),即相当于指明了网络程序所采用的通信协议(T C P 还是U D P);参数p r o t o c
15、 o l 由于指定了t y p e,一般取O 即可。5 4(2)b i n d 函数b i n d()用来将套接口绑定到本地计算机的某一端口,其格式声明为:i n tb i n d(i n ts o c k f d,s t r u c ts o c k a d d r*m y a d d r,i n ta d d r I e n)s o c k f d 为套接口描述字;指针m y a d d r 指向s o c k a d d r结构,该结构包含了远程服务程序的I P 地址与端口号;a d d r l e n 指明s o c k a d d r 结构的长度。(3)l i s t e n 与a
16、c c e p t 函数服务器端通过l i s t e n()等待一个进入的连接请求,接收到的请求存于队列中。当有多个客户端和服务器相连时,通过参数b a c k I o g 指定队列的最大长度。a c c e p t()则从已接收的连接请求队列中取出请求并分析这个请求,若队列为空,则使服务器端程序阻塞。本文主要阐述的是面向连接的数据流通信的S o c k e t编程过程。客户机服务器主要编写客户程序和服务器程序,以下是主要的编程框架。面向连接的数据流通信中,服务器端程序基本的编写步骤如图2 所示。首先,在服务器端使用S o c k e t()建立一个通信端口,再用b i n d()命令把一个
17、地址绑定到这个端口上。然后,服务器端使用l i s t e n()侦听连接请求,当远程的客户机试图通过c o n n e c t()连接l i s t e n()正在侦听的端口时,连接将会在队列中等待,直到使用a c c e p t()处理他。在a c c e p t()处理了连接请求后,将会生成一个新的描述这个连接端口的套接字,利用这个套接字就可以发送和接收数据了。如果l i s t e n()一直没有侦听到连接请求,那么服务器任务就会在a c c e p t()处阻塞(在阻塞模式下),一直到有连接请求到来。不论何种编程语言,和s o c k e t 打交道都是这一组调用,只是在格式上有所区
18、别。V i s u a lB a s i c 采用W i n S o c k 控件,C+B u i l d e r 采用T c l i e n t S o c k e t 元件和T s e r v e r S o c k e t 元件,v i s u a lC+采用M F C 类中的C A s y n c S o c k e t 类和C S o c k e t 类,J a v a 中通过J a v a n e t S o c k e t 和J a v a n e t S e r v e r S 0 c k e t 类库来实现网络之间的通讯。服务器图2T C P 客户机服务器程序的工作流程 万方
19、数据对于客户机任务,他也需要先用S o c k e t()建立一个通信端口,但是不必用b i n d()把一个本地地址绑定到这个端口上,而是直接使用c o n n e c t()向指定的服务器发送连接请求。函数c o n n e c t()调用成功后,套接口描述字就与远程服务程序建立好了连接,建立连接后通过s e n d()和r e c v()实现数据的发送与接收。s e n d()返回实际发送的字节数,如果返回的字节数比要发送的字节数少,则在以后必须发送剩下的数据。套接口读写完毕后,可通过c l o s e()调用关闭连接的套接口文件描述符。3 用J a v a 编写的客户服务器应用程序示例
20、网络应用程序的核心由一对程序组成一个客户程序和一个服务器程序。当这2 个程序执行的时候,系统就会创建一个客户端进程和一个服务器端进程,并且这2个进程通过对S o c k e t 的读写来互相通信。下面就客户月艮务器模型来对T C P 的S o c k e t 编程进行示范,程序功能如下:客户端从其键盘读入一行并将该行发送到通往服务器的套接字上;服务器从其连接套接字读入一行并将该行转换成大写;服务器将改写后的这一行输出到通往客户端的连接套接字上;客户端从他的套接字中读出修改后的行,并将该行在显示器上打印输出。(1)应用程序的客户端代码如下:i m p o r tj a V a i o*5i m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 环境 基于 TCP Socket 编程 浅析
限制150内