Linux下网络Socket编程技术.pdf
《Linux下网络Socket编程技术.pdf》由会员分享,可在线阅读,更多相关《Linux下网络Socket编程技术.pdf(4页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2 0 0 5 年第2 期 通信与广播电视 5 l L i n u x 下网络 S o c k e t 编程技术 吴祖民 赵 勇一 杨仁庆一 摘 要 L i n u x 作为一个完全开放其原代码的免费的自 由软件,兼容了 各种U N I X标准 (如P O S IX、U N IX S y s t e m V和B S D U N I X等)的多用户、多 任务的具有复杂内 核的 嵌入式操作系统。L i n u x 下网络编程得到很非常广泛的应用,本文介绍的L in u x下 网络S o c k e t 的基本概念和函数调用。关键词:s o c k e t c o n n e c t l i s t
2、e n a c c e p t c l o s e r e a d w r i te S o c k e t P r o g r a n u n i n g u n d e r L i n u x Wu Z h u mi n Z h a o Y o n g Y a n g R e n q i n g Ab s t r a c t A s a f u ll y s o u r c e c o d e o p e n e d a n d f r e e s o f t w a r e L i n u x i s c o m p a ti b l e t h a l l k i n d s o f
3、U N IX s t a n d a r d s l i k e P O S IX,U N IX s y s t e m V and B S D U N IX,e t c t h a t i s t o s a y the L i n u x o w n s a c o mp a ti b l e mu l ti u s e r s,mu l ti t a s k s sop h i s ti c a t e d e m b e d d e d o p e r a t i n g s y s t e rnT h e n e t w o r k p r o g r a m m i n g u n
4、 d e r L i n u x h a s f o u n d w i d e a p p l i c a ti o n s Th e p a p e r w i l l p r e sen t s the b asi c c o n c e p t and f u n c ti o n rec a l l i n g o f the S o c k e t u n d e r L i n u x Ke y w o r d s:s o c k e t c o nn e c t l i s t e n a c c e p t c l o se rea d w r i t e S o c k e
5、 t(套接字)是通过标准的U N IX文件描述符和其它程序通信的一个方法。每一个 套接字都用一个半相关描述;协议,本地地址、本地端口来表示;一个完整的套接字则 用一个相关描述:协议,本地地址、本地端口、远程地址、远程端口,每一个套接字都 有一个本地的由 操作系统分配的唯一的套接字号。S o c k e t 的三种类型:流式S o c k e t(S O C K S T R E A M),提供可靠、面向连接的通信流,使用T C P 协议,保证了数据传输的正确性和 顺序;数据报S o c k e t(S O C K D G R A M),它定义了 一种无连接的服务,数据通过相互独立的 报文进行传输
6、,是无序的,不保证可靠、无差错。它使用数据报协议U D P 协议;原始S o c k e t,它允许对底层协议如I P 或I C M P 直接访问,它功能强大但使用较为不便,主要用于一些 协议的开发。首先调用基本函数s o c k e t()创建一个套接字,函数为i n t s o c k e t(in t d o m a i n,in t t y p e,作者系熊猫军通四 部助理工程师 作者系熊猫军通四 部助理工程师 作者系熊猫军通四部助理工程师 维普资讯 http:/ 5 2 通信与广播电 视 2 0 0 5 年第2 期 in t p r o t o c o 1),其中参数d o m a
7、i n 指定要创建的套接字的协议族,可以是如下值:A F U N I X (U N I X域协议族,本机的进程间通信时使用),A F I N E T(In t e m e t 协议族(T C P I P),A F I S O(I S O 协议族);参数t y p e 指定套接字类型,可以是如下值:S O C K S T R E A M(流套接 字,面向连接的和可靠的通信类型),S O C K D G R A M(数据报套接字,非面向连接的和不 可靠的通信类型),S O C K _ R A W(原始套接字,只对I n t e m e t 协议有效,可以用来直接访问 I P 协议);参数p ro
8、t oc o l 通常设置成0,表示使用默认协议,如I n t e r n e t 协议族的流套接字使 用T C P 协议,而数据报套接字使用U D P 协议。函数c o n n e c t()定义为i n t c o nne c t(i n t s o c k f d,s t r u c t s o e k a d d r jIc s e r v a d d r,in t a d d r l e n)参数s o c k f d 是函数s o c k e t 返回的套接字描述符;参数s e r v a d d r 指定远程服务器的套接字地 址,包括服务器的I P 地址和端口 号;参数a d d
9、 r l e n 指定这个套接字地址的长度。成功时返回 0,否则返回一 1。在调用函数 c o n n e c t 之前,客户机需要指定服务器进程的套接字地址。客 户机一般不需要指定自己的 套接字地址(I P 地址和端口 号),系统会自动从1 0 2 4 至5 0 0 0的 端口 号范围内为它选择一个未用的端口 号,然后以这个端口号和本机的I P 地址填充这个套 接字地址。客户机调用函数c o n n e c t 来主动建立连接。这个函数将启动T C P 协议的3 次握手 过程。在建立连接之后或发生错误时函数返回。函数b i n d()将本地地址与套接字绑定起来,函数定义为in t b i n
10、 d(i n t s oc k f d,s t r u c t s o c k a d d r jIc m y a d d r,i n t a d d r l e n);参数s o c k f d 是函数s o c k t 返回的套接字描述符;参数m y a d d r 是本地地址;参数a d d r l e n 是套接字地址结构的长度。执行成功时返回0,否则返回一 1。服 务器和客户机都可以调用函 数 b i n d 来绑定套接字地址,但一般是服务器调用函数 b i n d 来绑 定自己的公认端口 号。一般只有在主机有多个网络设备接口 时使用。我们一般不在客户机上 使用固 定的客户机端口号,
11、除非是必须使用的情况。函数l i s t e n()将一个套接字转换为征听套接字,定义为:i n t l i s t e n(i n t s o c k f d,i n t b a c k l o g),参数s o c k f d 指定要转换的套接字描述符,参数b a c k l o g 设置请求队列的最大长度,执行成功时返回0,否则返回一 1。函数a c c e p t()从征听套接字的完成队列中接收一个已经建立起来的T C P 连接。如果 完成连接队列为空,那么这个进程睡眠。定义为i n t a c c e p t(i n t s o c k f d,s t r u c t s oc k
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Linux 网络 Socket 编程 技术
限制150内