Socket编程回顾--套接字编程基础.doc

Socket编程回顾--套接字编程基础.doc

ID:56183930

大小:253.50 KB

页数:27页

时间:2020-03-18

Socket编程回顾--套接字编程基础.doc_第1页
Socket编程回顾--套接字编程基础.doc_第2页
Socket编程回顾--套接字编程基础.doc_第3页
Socket编程回顾--套接字编程基础.doc_第4页
Socket编程回顾--套接字编程基础.doc_第5页
资源描述:

《Socket编程回顾--套接字编程基础.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Socket编程回顾⑴“套接字编程基础套接字,英文为socket,是一种双向的通信端口。位于网络中的主机通过连接的套接字提供的接口进行数据传输。本节将主要介绍使用套接字进行编程的一些基本概念。13.1.1套接字与端口套接字是一种使用标准UNIX文件描述符(filedescriptor)与英他程序通信的方式。套接字可以看作是处于不同主机之间的两个程序的通信连接端点。一方面程序将要传输的信息写入套接字中,而另一方面则通过读取套接字内的数据來获得传输的信息。吗口图13」套接字通信示意图图13.1所示为使用套接字进行通信的示意图。假设存在两台主机A与B,在主机A中存

2、在进程C,主机B中存在进程D,当进程C需耍将数据送到进程D时,首先将数据写到套接字中,而进程D可以通过读取套接字來获得进程C发送的信息。在网络中,不同计算机是通过IP地址来区分的,也就是说,耍将数据山主机A发送到主机B,只要知道主机B的IP地址就可以确定数据要发送的目的地。但是,在主机A与B中不可能只有进程C和进程D两个进程。主机B在收到主机A发送來的数据后,如何才能确立该数据是发送给进程D?因此,还需要某种标识信息,用于描述网络通信数据发往的进程。TCP/IP协议提出了协议端口的概念,用于标识通信的进程。当进程与某个端口绑定后,操作系统会将收到的给该端口的

3、数据送往该进程°与文件扌苗述符类似,每个端口都有被称为端口号的整数类型的标识符,该标识符用于区分不同的端口。不同协议可以使用相同的端口号进行数据传输。例如,TCP使用了344的端口号,UDP同样可以使用344端口号进行数据传输。端口号为一个16位的无符号幣数,其収值范FR为0〜65535。低于256的端口被作为系统的保留端II号,主要用于系统进程的通信,不在这一范围的端口号被称为自山端II号,可以山进程白山使用。13.1.2套接字编程相关数据结构在开发使用套接字进行通信的程序吋,常会用到sockaddr数据结构或sockaddr.in数据结构。sockadd

4、r数据结构用于保存套接字的地址信息,具体定义如下:structsockaddr)unsignedshortsa_family;charsa_data[14]);1sa_family:用于指定地址族,如果是TCP/IP通信,该值取PF_INET01sa_data:用于保存套接字的IP地址和端口号信息。而sockaddrjn数据结构与sockaddr类似,该结构体的定义如下:stmctsockaddr_in{shortintsin_family;unsignedshortintsin_port;structin_addrsin_addr;unsignedchar

5、sin_zero[8];};1sin_family:用于指定地址族。1sin_port:套接字通信的端II号。1sin.addr:通信的IP地址。1sin_zero[8J:用以填充0,保持与structsockaddr同样大小。山于sockaddr数据结构与sockaddr_in数据结构的大小是相同的,指向sockaddrjn的指针可以通过强制转换,转换成指向sockaddr结构的指针。13.1.3套接字类型常'用的TCP/IP协议的3种套接字类型如下所示。流套接字(SOCK_STREAM):流套接字用于捉供而向连接、可靠的数据传输服务。该服务将保证数据能够

6、实现无差错、尢重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(TheTnmsmissionControlProtocol)协议。1数据报套接字(SOCK_DGRAM):数据报套接字提供了一•种无连接的服务。该服务并不能保证数据传输的町靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接宁使用UDP(UserDatagramProtocol)协议进行数据的传输。山于数据包套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。I原始套接字(S

7、OCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读収TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。13.1.4big-endian与little-endianAAMAM不同休系的CPU在内存中的数据存储往往存在着差异。例如,In©的x86系列处理器将低序字节存储在起始地址,而一些RISC架构的处理器,如IBM的370主机使用的PowerPC或Motorola公司生产的CPU,都将高序字

8、节存储在起始位置。这两种不同的存储方式被称为litt

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。