- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第 8 章 网络程序设计 本章重点 Socket的基本概念 如何实现面向连接的TCP编程 如何实现非连接的TUDP编程 复杂网络程序的实现 8.1.1 TCP/IP概述 TCP/IP协议叫做传输控制/网际协议,又叫网络通讯协议。 TCP/IP是70年代中期美国国防部为其ARPANET广域网开发的网络体系结构和协议标准,以它为基础组建的INTERNET是目前国际上规模最大的计算机网络,正因为INTERNET的广泛使用,使得TCP/IP成了事实上的标准。 各种协议: 8.1.2 TCP/IP模块结构 TCP/IP从协议分层模型方面来看,由四个层次组成:网络接口层、网络层、传输层、应用层 。 8.2.1 socket简介 socket是网络编程的一种接口,它是一种特殊的I/O,用socket函数建立一个Socket连接,此函数返回一个整型的socket描述符,随后进行数据传输。 通常socket分为三种类型:流式socket、数据报socket、原始socket。 8.2.2 socket套接口简介 一个IP地址,一个通讯端口,就能确定一个通讯程序的位置。为此开发人员专门设计了一个套接结构,就是把网络程序中所用到的网络地址和端口信息放在一个结构体中。 一般套接口地址结构都以“sockaddr”开头。socket根据所使用的协议的不同可以分TCP套接口和UDP套接口,又称为流式套接口和数据套接口。 8.2.3 socket套接口的数据结构 两个重要的数据类型:sockadd和sockaddr_in,这两个结构类型都是用来保存socket信息的,如IP地址、通信端口等。 8.2.4 TCP编程 基于TCP协议的编程,其最主要的特点是建立完连接后,才进行通信。 常用的基于TCP网络编程函数及功能 8.2.4 TCP编程 例8.1:服务器通过socket连接后,向客户端发送字符串“连接上了”。在服务器上显示客户端的IP地址或域名。 8.2.4 TCP编程 客户端: 建立socket:socket(AF_INET, SOCK_STREAM, 0); 请求连接connect:connect(sockfd, (struct sockaddr *)serv_addr, sizeof(struct sockaddr)); 接收数据recv:recv(sockfd, buf, MAXDATASIZE, 0); 关闭close:close(sockfd); 8.2.4 TCP编程 服务端源程序代码: 8.2.4 TCP编程 客户端源程序代码 : 8.2.5 UDP编程 基于UDP协议的编程,其最主要的特点是不需要用函数bind把本地IP地址与端口号进行绑定,也能进行通信。 常用的基UDP网络编程函数及功能: 8.2.5 UDP编程 例8.2:服务器端接受客户端发送的字符串。客户端将打开liu文件,读取文件中的3个字符串,传送给服务器端,当传送给服务端的字符串为”stop”时,终止数据传送并断开连接。 8.2.5 UDP编程 主要语句说明: 服务端: 建立socket:socket(AF_INET,SOCK_DGRAM,0) 绑定bind:bind(sockfd,(struct sockaddr *)adr_inet,sizeof(adr_inet)); 接收数据recvfrom:recvfrom(sockfd,buf,sizeof(buf),0,(struct sockaddr *)adr_clnt,len); 关闭close:close(sockfd); 8.2.5 UDP编程 客户端: 建立socket:socket(AF_INET, SOCK_STREAM, 0); 读取liu文件:fopen(liu,r); 发送数据sendto:sendto(sockfd,buf,sizeof(buf),0,(struct sockaddr *)adr_srvr,sizeof(adr_srvr)); 关闭close:close(sockfd); 8.2.5 UDP编程 服务端源程序代码: 8.2.5 UDP编程 客户端源程序代码 : 8.3 网络高级编程 在socket应用中,有一个很重要的特性,那就是如何处理阻塞,解决I/O多路利用问题。 在数据通信中,当服务器运行函数accept() 时,假设没有客户机连接请求到来,那么服务器就一直会停止在accept()语句上,等待客户机连接请求到来,出现这样的情况就称为阻塞。 例8.3:程序运行当中,在10.5秒判断有没有按回车键,有则返回“输入了”,否则返回“超时”。 8.3 网络高级编程 源程序代码: 8.3 网络高级编程 例8.4:编写一个网络聊天程序。 8.3 网络高级编程
文档评论(0)