- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第9章 网络通信应用;9.1 网络通信基础;9.1.1 TCP/IP协议族;9.1.2 IP协议;9.1.2 IP协议;;;9.1.3 TCP协议;9.1.4 UDP协议;9.1.5 学习分析协议的方法;9.2 Socket通信基本概念; 在UNIX系统中,网络应用编程界面有两类:UNIX BSD的Socket和UNIX System V的TLI 。由于Sun公司采用了支持TCP/IP的UNIX BSD操作系统,使TCP/IP的应用有了更大的发展,其网络应用编程界面──Socket在网络软件中被广泛应用,至今已引进到Windows和VxWorks等操作系统中,成为开发网络应用软件的强大工具。
Socket相当于网络上的通信节点,即IP地址加上端口号。应用程序使用了Socket之后,就可以和网络上的任何一个通信节点连接。Socket之间的通信就如同一台PC机上两个进程间的通信一样。
在Linux操作系统中,可以将Socket看成是一种设备,即一种可作双向传输的信道,Linux程序可以经过此设备与本地或是远程的程序进行通信。;Socket常被翻译成套接字或者插口。它实际就是网络上的通信端点,使用者或应用程序只要连接到Socket便可以和网络上任何一个通信端点连接、传输数据。
Socket封装了通信的细节,在Linux系统中,为使用者提供了类似文件描述符的操作方法。
Socket分成面向连接的数据流通信和无连接的数据报通信。
;9.2.1 创建socket对象;9.2.2 面向连接的Socket通信实现;9.2.2 面向连接的Socket通信实现;9.2.3 面向连接的echo服务编程实例; 目前,Internet仍使用IPv4作为寻址模式。在Socket中,寻
址模式的结构为sockadd_in,定义如下:
struct sockadd_in{
sa_family_t sin_family; /*addressing mode*/
unsigned short int sin_port; /*port number*/
struct in_addr sin_addr; /*Internet address*/
}
其中结构成员sin_family用来说明Socket所使用的寻址模式,
在网络编程中,其值只能是AF_INET;
成员sin_port表示TCP/IP的端口号;
成员sin_addr是in_addr结构,用来表示IP地址;
in_addr的结构很简单,只有一个unsigned long型的成员变量。
; TCP协议是面向连接的,在建立连接之前,经历的过程比较多。
网络程序无论是使用TCP还是UDP协议,要通过Socket传输数
据,都必须建立Socket,可以使用socket()函数建立一个Socket。该函数的原型如下:
int socket(int domain,int type,int protocal);
参数domain的值在网络程序中只能为AF_INET,表示使用Internet协议
参数type为连接的类型,SOCK_STREAM,表示采用TCP建立连接;
参数protocal代表通信协议,一般设为0,表示自动选择。
bind()函数用于将IPv4 Socket寻址结构绑定到其所建立的
Socket,当有数据包到达时,Linux内核会将这个数据包让给其
绑定的Socket来处理。bind()函数的原型如下:
int bind(int sockfd,const struct sockaddr_in *my_addr,int adr_len);
参数sockfd是调用函数socket()的返回值;
参数my_addr用来存放绑定的IPv4寻址结构;参数adr_len为结构sockaddr_in的长度。;使用listen()函数来监听、等待客户端的连接请求。该函数的原型如下:
int listen(int sockfd,int backlog);
参数sockfd为socket()函数的返回值;参数backlog用来指定最
大连接数,一般设为5。
当服务器端接收到客户端的连接请求时,会把连接请求放在连
接队列中,接着用accept()函数处理并接受队列中的请求。
int accept( int sockfd,struct sockadd_in *addr,int addrlen);
参数addr用来存放客户端的IP地址,其他两个参数的设置同
bind()函数的这两个参数。
connect()函数是客户端使用的函数。当客户端建立好Sock
文档评论(0)