TCPSocket编程.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《TCPSocket编程.ppt》由会员分享,可在线阅读,更多相关《TCPSocket编程.ppt(90页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、USTCNICTCP/IP Socket网络编程2023/1/13TCP/IP Socket网络编程2/83内容大纲Internet与TCP/IP协议TCP/IP协议体系结构与OSI模型Socket编程接口WindowsSocketLinuxSocketTCP/IP网络程序框架与示例2023/1/13TCP/IP Socket网络编程3/83Internet与TCP/IP协议第一节Internet与TCP/IP协议2023/1/13TCP/IP Socket网络编程4/83Internet的历史Internet“冷战”的产物1957年10月和11月,前苏联先后有两颗“Sputnik”卫星上天1
2、958年美国总统艾森豪威尔向美国国会提出建立DARPA(DefenseAdvancedResearchProjectAgency),即国防部高级研究计划署,简称ARPA1968年6月DARPA提出“资源共享计算机网络”(ResourceSharingComputerNetworks),目的在于让DARPA的所有电脑互连起来,这个网络就叫做ARPAnet,即“阿帕网”,是Interne的最早雏形2023/1/13TCP/IP Socket网络编程5/83网络互联促成了TCP/IP协议的产生早期的ARPAnet使用网络控制协议(NetworkControlProtocol,NCP),不能互联不同类
3、型的计算机和不同类型的操作系统,没有纠错功能1973年由Kahn和VintonCerf两人合作为ARPAnet开发了新的互联协议。1974年12月两人正式发表第一份TCP协议详细说明,但此协议有信包丢失时不能得到有效的纠正2023/1/13TCP/IP Socket网络编程6/83网络互联促成了TCP/IP协议的产生TCP协议分成了两个不同的协议:用来检测网络传输中差错的传输控制协议TCP专门负责对不同网络进行互联的互联网协议IP从此TCP/IP协议诞生1983年ARPAnet上停止使用NCP,互联网上的主机全部使用TCP/IP协议,TCP/IP协议成为Internet中的“世界语”2023/
4、1/13TCP/IP Socket网络编程7/83Internet与TCP/IP协议第二节TCP/IP协议体系结构与OSI模型2023/1/13TCP/IP Socket网络编程8/83网络的体系结构网络采用分而治之的方法设计,将网络的功能划分为不同的模块,以分层的形式有机组合在一起。每层实现不同的功能,其内部实现方法对外部其他层次来说透明,每层向上层提供服务,也可以使用下层提供的服务网络体系结构即指网络的层次结构和每层所使用协议的集合两类非常重要的体系结构:OSI与TCP/IP2023/1/13TCP/IP Socket网络编程9/83OSI开放系统互联模型OSI模型相关的协议已经很少使用,
5、但模型本身非常通用共有七层2023/1/13TCP/IP Socket网络编程10/83TCP/IP协议族的体系结构TCP/IP协议是Internet事实上的工业标准。一共有四层2023/1/13TCP/IP Socket网络编程11/83TCP/IP协议与OSI参考模型的对应关系2023/1/13TCP/IP Socket网络编程12/83TCP/IP协议通信模型2023/1/13TCP/IP Socket网络编程13/83数据的封装与传递过程2023/1/13TCP/IP Socket网络编程14/83一些基本概念IP地址端口号字节序2023/1/13TCP/IP Socket网络编程15
6、/83IP地址IP地址是Internet中主机的标识Internet中的主机要与别的机器通信必须具有一个IP地址一个IP地址为32位(IPV4),或者128位(IPV6)每个数据包都必须携带目的IP地址和源IP地址,路由器依靠此信息为数据包选择路由特殊的IP地址:广播地址、多播地址表示形式:常用点分形式,如202.38.64.10,最后都会转换为一个32位的整数。IP地址分级子网掩码2023/1/13TCP/IP Socket网络编程16/83端口号为了区分一台主机接收到的数据包应该递交给哪个进程来进行处理,使用端口号TCP端口号与UDP端口号独立端口号一般由IANA(InternetAssi
7、gnedNumbersAuthority)管理众所周知端口:11023,1255之间为大部分众所周知端口,2561023端口通常由UNIX占用注册端口:102449151动态或私有端口:49151655352023/1/13TCP/IP Socket网络编程17/83端到端通信数据包投递过程2023/1/13TCP/IP Socket网络编程18/83一个比喻如果把IP数据包的投递过程看成是给远方的一位朋友寄一封信,那么IP地址就是这位朋友的所在位置,如安徽合肥中国科大计算系(依靠此信息进行路由)端口号就是这位朋友的名字(依靠这个信息最终把这封信交付给这位收信者)2023/1/13TCP/IP
8、 Socket网络编程19/83字节序大尾端(Big-Endian):字节的高位在内存中放在存储单元的起始位置小尾端(Little-Endian):与大尾端相反2023/1/13TCP/IP Socket网络编程20/83字节序网络字节序(NBO,NetworkByteOrder)使用统一的字节顺序,避免兼容性问题主机字节序(HBO,HostByteOrder)不同的机器HBO是不一样的,这与CPU的设计有关Motorola68K系列,HBO与NBO是一致的IntelX86系列,HBO与NBO不一致2023/1/13TCP/IP Socket网络编程21/83Internet与TCP/IP协议
9、第三节Socket编程接口2023/1/13TCP/IP Socket网络编程22/83内容Socket简介WindowsSocketLinuxSocketSocket常用函数介绍TCP/IP网络程序框架与实例通信方式阻塞非阻塞2023/1/13TCP/IP Socket网络编程23/83为什么需要Socket普通的I/O操作过程打开文件读/写操作关闭文件TCP/IP协议被集成到操作系统的内核中,引入了新型的“I/O”操作进行网络操作的两个进程在不同的机器上,如何连接?网络协议具有多样性,如何进行统一的操作需要一种通用的网络编程接口:Socket2023/1/13TCP/IP Socket网络
10、编程24/83什么是Socket独立于具体协议的网络编程接口在ISO模型中,主要位于会话层和传输层之间BSDSocket(伯克利套接字)是通过标准的UNIX文件描述符和其它程序通讯的一个方法,目前已经被广泛移植到各个平台。2023/1/13TCP/IP Socket网络编程25/83Socket类型流式套接字(SOCK_STREAM)提供了一个面向连接、可靠的数据传输服务,数据无差错、无重复的发送且按发送顺序接收。内设置流量控制,避免数据流淹没慢的接收方。数据被看作是字节流,无长度限制。数据报套接字(SOCK_DGRAM)提供无连接服务。数据包以独立数据包的形式被发送,不提供无差错保证,数据可
11、能丢失或重复,顺序发送,可能乱序接收。原始套接字(SOCK_RAW)可以对较低层次协议,如IP、ICMP直接访问。2023/1/13TCP/IP Socket网络编程26/83Socket的位置协议端口协议端口网络中可以被命名和寻址的通信端口,是操作网络中可以被命名和寻址的通信端口,是操作系统可分配的一种资源。系统可分配的一种资源。传输层与网络层在功能上的最大区别是传输层传输层与网络层在功能上的最大区别是传输层提供进程通信能力。提供进程通信能力。因此,网络通信的最终地址就不仅仅是主机地因此,网络通信的最终地址就不仅仅是主机地址了,还包括可以描述进程的某种标识符。址了,还包括可以描述进程的某种标
12、识符。为此,为此,TCP/IPTCP/IP协议提出了协议端口协议提出了协议端口(protocolprotocolportport,简称端口)的概念,用于,简称端口)的概念,用于标识通信的进程。标识通信的进程。端口是一种抽象的软件结构(包括一些数据端口是一种抽象的软件结构(包括一些数据结构和结构和I/OI/O缓冲区)。缓冲区)。应用程序(即进程)通过系统调用与某端口应用程序(即进程)通过系统调用与某端口建立连接(建立连接(bindingbinding)后,传输层传给该端口)后,传输层传给该端口的数据都被相应进程所接收,相应进程发给的数据都被相应进程所接收,相应进程发给传输层的数据都通过该端口输出
13、。传输层的数据都通过该端口输出。在在TCP/IPTCP/IP协议的实现中,端口间的操作类似协议的实现中,端口间的操作类似于一般的于一般的I/OI/O操作,进程获取一个端口,相当操作,进程获取一个端口,相当于获取本地唯一的于获取本地唯一的I/OI/O文件,可以用一般的读文件,可以用一般的读写原语访问之。写原语访问之。类似于文件描述符,每个端口都拥有一个类似于文件描述符,每个端口都拥有一个叫端口号(叫端口号(portportnumbernumber)的整数型标识)的整数型标识符,用于区别不同端口。符,用于区别不同端口。由于由于TCP/IPTCP/IP传输层的两个协议传输层的两个协议TCPTCP和和
14、UDPUDP是是完全独立的两个软件模块,因此各自的端完全独立的两个软件模块,因此各自的端口号也相互独立,口号也相互独立,如如TCPTCP有一个有一个255255号端口,号端口,UDPUDP也可以有一个也可以有一个255255号端口,二者并不冲突。号端口,二者并不冲突。半相关半相关 网络中用一个三元组可以在全局唯一标志一网络中用一个三元组可以在全局唯一标志一个进程:个进程:(协议,本地地址,本地端口号)(协议,本地地址,本地端口号)这样一个三元组,叫做一个半相关(这样一个三元组,叫做一个半相关(half-half-associationassociation),它指定连接的每半部分。),它指定连
15、接的每半部分。全相关全相关一个完整的网间进程通信需要由两个进程组成,一个完整的网间进程通信需要由两个进程组成,并且只能使用同一种高层协议。并且只能使用同一种高层协议。一个完整的网间通信需要一个五元组来标识:一个完整的网间通信需要一个五元组来标识:(协议,本地地址,本地端口号,远程地址,(协议,本地地址,本地端口号,远程地址,远程端口号)远程端口号)这样一个五元组,叫做一个相关这样一个五元组,叫做一个相关(associationassociation),即两个协议相同的半相关),即两个协议相同的半相关才能组合成一个合适的相关,或完全指定组成才能组合成一个合适的相关,或完全指定组成一连接。一连接。
16、SocketSocket接口接口应用程序的基本网络接口应用程序的基本网络接口由操作系统提供;由操作系统提供;由操作系统提供;由操作系统提供;进程的通信端点进程的通信端点进程的通信端点进程的通信端点一个一个一个一个socketsocket的信息含义的信息含义的信息含义的信息含义协议类型协议类型协议类型协议类型本地地址本地地址本地地址本地地址本地端口号本地端口号本地端口号本地端口号远端地址远端地址远端地址远端地址远端端口号远端端口号远端端口号远端端口号Client-Server执行模式Client-Server端执行模式SocketSocketbindbindlistenlistenaccepta
17、cceptSend/recv(Send/recv(循环循环)closecloseSocketSocketconnectconnectSend/recv(Send/recv(循环循环)closeclose通信阶段通信阶段连接建立阶段连接建立阶段关闭阶段关闭阶段准备阶段准备阶段ServerServerClientClient2023/1/13TCP/IP Socket网络编程34/83两类系统中使用的Socket不同操作系统中的SocketWindowsSocket(Winsock)LinuxSocket(BSDSocket)2023/1/13TCP/IP Socket网络编程35/83Windo
18、wsSocket简称Winsock,是在Windows环境下使用的一套网络编程规范,基于4.3BSD的BSDSocketAPI制定1991年Winsock1.1,16位,由WINSOCK.DLL支持,主要用在Windows95中1997年Winsock2.2版,32位,由WSOCK32.DLL支持,主要用在Windows98及以后的版本中已经成为Windows环境下网络编程的事实标准三类函数与BSDSocket相兼容的基本函数与BSDSocket相兼容的网络信息检索函数Windows专用扩展函数2023/1/13TCP/IP Socket网络编程36/83LinuxSocket基本上就是BSD
19、Socket需要使用的头文件数据类型:#include函数定义:#include2023/1/13TCP/IP Socket网络编程37/83Socket常用函数介绍基本函数网络信息检索函数2023/1/13TCP/IP Socket网络编程38/83基本函数网络连接函数socket创建套接字bind绑定本机端口connect建立连接listen监听端口accept接受连接recv,recvfrom数据接收send,sendto数据发送close,shutdown关闭套接字2023/1/13TCP/IP Socket网络编程39/83基本函数转换函数IP地址转换函数inet_addr()点分十
20、进制数表示的IP地址转换为网络字节序的IP地址inet_ntoa()网络字节序的IP地址转换为点分十进制数表示的IP地址字节排序函数htonl4字节主机字节序转换为网络字节序ntohl4字节网络字节序转换为主机字节序htons2字节主机字节序转换为网络字节序ntohs2字节网络字节序转换为主机字节序2023/1/13TCP/IP Socket网络编程40/83网络信息检索函数网络信息检索函数gethostname获得主机名getpeername获得与套接口相连的远程协议地址getsockname获得套接口本地协议地址gethostbyname根据主机名取得主机信息gethostbyaddr根据
21、主机地址取得主机信息getprotobyname根据协议名取得主机协议信息getprotobynumber根据协议号取得主机协议信息getservbyname根据服务名取得相关服务信息getservbyport根据端口号取得相关服务信息getsockopt/setsockopt获取/设置一个套接口选项ioctlsocket设置套接口的工作方式2023/1/13TCP/IP Socket网络编程41/83Windows中的Socket编程Windows中的Socket编程Winsock的启动WinsockAPI基本函数TCP/IP网络程序框架(C/S模式)阻塞与非阻塞通信方式实例程序说明2023
22、/1/13TCP/IP Socket网络编程42/83WinsockWinsock是一个基于Socket模型的API,在Windows系统中广泛使用它在Berkeley接口函数的基础上,还增加了基于消息驱动机制的Windows扩展函数Winsock1.1只支持TCP/IP网络,Winsock2.2增加了对更多协议的支持2023/1/13TCP/IP Socket网络编程43/83Winsock(2)需要包含头文件Winsock2.h,需要使用库ws2_32.lib,包含办法可以用语句来告诉编译时调用该库#pragmacomment(lib,”ws2_32.lib”);如果使用VisualC+6
23、.0,可以通过“工程”“设置”“工程设置”“链接”“对象/库模块”中加入“ws2_32.lib”2023/1/13TCP/IP Socket网络编程44/83WindowsSocket的启动使用WinsockAPI编制的网络应用程序中,在调用任何一个Winsock函数之前都必须检查协议栈安装情况,使用函数WSAStartup()完成操作。intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);wVersionRequested是一个WORD型(双字节型)数值,指定使用的版本号,对Winsock2.2而言,此参数的值为0 x0202,也可以
24、用宏MAKEWORD(2,2)来获得lpWSAData是一个指向WSADATA结构的指针,它返回关于Winsock实现的详细信息2023/1/13TCP/IP Socket网络编程45/83Winsock启动示例#includeWORDwVersionRequested;WSADATAwsaData;wVersionRequested=MAKEWORD(2,2);if(WSAStartup(wVersionRequested,&wsaData)!=0)/Winsock初始化错误return;if(wsaData.wVersion!=wVersionRequested)/Winsock版本不匹配
25、WSACleanup();return;/说明WinsockDLL正确加载,可以执行以下代码2023/1/13TCP/IP Socket网络编程46/83创建套接口socket()应用程序在使用套接口通信前,必须要拥有一个套接口,使用socket()函数来给应用程序创建一个套接口。SOCKETsocket(intaf,inttype,intprotocol);2023/1/13TCP/IP Socket网络编程47/83socket()参数说明af参数说明套接字接口要使用的协议地址族,地址族与协议族含义相同。如果想建立一个TCP或UDP,只能用常量AF_INET表示使用互联网协议(IP)地址。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- TCPSocket 编程
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内