TCP(IP)协议与网络编程

上传人:gu****n 文档编号:243095523 上传时间:2024-09-15 格式:PPT 页数:88 大小:621.50KB
返回 下载 相关 举报
TCP(IP)协议与网络编程_第1页
第1页 / 共88页
TCP(IP)协议与网络编程_第2页
第2页 / 共88页
TCP(IP)协议与网络编程_第3页
第3页 / 共88页
点击查看更多>>
资源描述
*,*,9/15/2024,TCP/IP,协议与网络编程,Version1.0,2010,年,6,月,9/15/2024,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,2,课程目标,预备知识,目标听众,日程表,词汇表,课程介绍,9/15/2024,3,了解计算机网络的构成,了解,OSI,七层网络模型,了解,TCP/IP,网络模型,理解,SOCKET,能使用,SOCKET,进行网络编程,课程目标,9/15/2024,4,C+,语言基础,对计算机网络以及网络编程有一定了解,预备知识,9/15/2024,5,程序员,目标听众,9/15/2024,6,共计:,0.5,天,详细安排,课程介绍,计算机网络简介,OSI,七层网络模型介绍,TCP/IP,网络模型介绍,SOCKET,介绍,TCP,编程,UDP,编程,Total:, hours,日程表,9/15/2024,7,OSI-,Open System Interconnection,TCP/IP-Transmission Control Protocol / Internet Protocol,SOCKET-,套接字,词汇表,9/15/2024,8,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,9,计算机网络是指将有独立功能的多台计算机,通过通信设备线路连接起来,在网络软件的支持下,实现彼此之间资源共享和数据通信的整个系统。,什么是计算机网络?,9/15/2024,10,计算机网络的基本功能是数据通信和资源共享。,计算机网络的基本功能,9/15/2024,11,按照覆盖范围可分为:,局域网,城域网,广域网,按照介质课分为:,有线网络,无线网络,微波网络,问题:校园网属于什么网络?,计算机网络的分类,9/15/2024,12,A,B,网络,192.168.0.118,192.168.0.10,协议,协议,端口号,端口号,计算机网络如何进行通信,9/15/2024,13,IP,网络中每台主机都必须有一个惟一的,IP,地址;,IP,地址是一个逻辑地址;,因特网上的,IP,地址具有全球唯一性;,32,位,,4,个字节,常用点分十进制的格式表示,例如:,192.168.0.16,IP,地址,9/15/2024,14,为进行网络中的数据交换(通信)而建立的规则、标准或约定。,(=,语义,+,语法,+,规则,),不同层具有各自不同的协议。,协议,9/15/2024,15,多种通信媒介,有线、无线,不同种类的设备,通用、专用,不同的操作系统,Unix,、,Windows ,不同的应用环境,固定、移动,不同业务种类,分时、交互、实时,用户业务的延续性,不允许出现大的跌宕起伏。,他们相互交织,构成了非常复杂的网络环境,网络异质性,9/15/2024,16,网络体系结构解决异质性问题采用的是分层方法,把复杂的网络互联问题划分为若干个较小的、单一的问题,在不同层上予以解决。,网络异质性的解决,9/15/2024,17,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,18,OSI(Open,System Interconnection),参考模型将网络的不同功能划分为,7,层。,OSI,七层参考模型,应用层,表示层,物理层,会话层,传输层,网络层,数据链路层,处理网络应用,数据表示,主机间通信,端到端的连接,寻址和最短路径,介质访问,(,接入,),二进制传输,9/15/2024,19,通信实体的对等层之间不允许直接通信。,各层之间是严格单向依赖。,上层使用下层提供的服务, Service user,;,下层向上层提供服务, Service provider,。,OSI,七层参考模型,9/15/2024,20,网络对等通信示例,我们是朋友,We are friend,传真,中国人,翻译,秘书,私友,We are friend,传真,日本人,翻译,秘书,对交谈内容的共识,用英语对话,使用传真通信,物理通信线路,9/15/2024,21,对等层实体之间虚拟通信。,下层向上层提供服务,实际通信在最底层完成。,网络对等通信的实质,9/15/2024,22,应用层:,远程登录协议,Telnet,文件传输协议,FTP,超文本传输协议,HTTP,域名服务,DNS,简单邮件传输协议,SMTP,邮局协议,POP3,OSI,各层使用协议简介,9/15/2024,23,传输层:,传输控制协议,TCP,:面向连接的可靠的传输协议,用户数据报协议,UDP,:是无连接的,不可靠的传输协议,OSI,各层使用协议简介,9/15/2024,24,网络层:,网际协议,IP,Internet,互联网控制报文协议,ICMP,Internet,组管理协议,IGMP,OSI,各层使用协议简介,9/15/2024,25,一台计算机要发送数据到另一台计算机,数据首先必须打包,打包的过程称为封装。,封装就是在数据前面加上特定的协议头部。,数据封装,数据,数据,协议头,9/15/2024,26,OSI,参考模型中,对等层协议之间交换的信息单元统称为协议数据单元,(PDU,,,Protocol Data Unit),。,OSI,参考模型中每一层都要依靠下一层提供的服务。,为了提供服务,下层把上层的,PDU,作为本层的数据封装,然后加入本层的头部(和尾部)。头部中含有完成数据传输所需的控制信息。,数据封装,9/15/2024,27,数据自上而下递交的过程实际上就是不断封装的过程。到达目的地后自下而上递交的过程就是不断拆封的过程。由此可知,在物理线路上传输的数据,其外面实际上被包封了多层“信封”。,某一层只能识别由对等层封装的“信封”,而对于被封装在“信封”内部的数据仅仅是拆封后将其提交给上层,本层不作任何处理。,数据封装,9/15/2024,28,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,29,TCP/IP,起源于美国国防部高级研究规划署,(DARPA),的一项研究计划,实现若干台主机的相互通信。,现在,TCP/IP,已成为,Internet,上通信的工业标准。,TCP/IP,模型,9/15/2024,30,TCP/IP,模型包括,4,个层次:,应用层,传输层,网络层,网络接口,TCP/IP,模型的分层,9/15/2024,31,TCP/IP,与,OSI,的对应关系,应用层,表示层,会话层,传输层,物理层,数据链路层,网络层,7,6,5,4,3,2,1,OSI,参考模型,应用层,传输层,网络接口,网络层,TCP/IP,模型,9/15/2024,32,按照,OSI,七层模型的描述,传输层提供进程(应用程序)通信的能力。为 了标识通信实体中进行通信的进程(应用程序),,TCP/IP,协议提出了协议端口(,protocol port,,简称端口)的概念。,端口是一种抽象的软件结构。应用程序通过系统调用与某端口建立连接(,binding,)后,传输层传给该端口的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。,端口,9/15/2024,33,端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,,TCP/IP,传输层的两个协议,TCP,和,UDP,是完全独立的两个软件模块,因此各自的端口号也相互独立。,端口使用一个,16,位的数字来表示,它的范围是,065535,,,1024,以下的端口号保留给预定义的服务。例如:,http,使用,80,端口。,端口,9/15/2024,34,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,35,我们开发网络应用程序是否需要我们手工的去封装我们需要传输的数据?,如何开发网络应用程序,9/15/2024,36,为了能够方便的开发网络应用软件,由美国伯克利大学在,Unix,上推出了一种应用程序访问通信协议的操作系统调用,socket(,套接字,),。,socket,的出现,使程序员可以很方便地访问,TCP/IP,,从而开发各种网络应用的程序。,SOCKET-,套接字的引入,9/15/2024,37,随着,Unix,的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了,Windows,等操作系统,成为开发网络应用程序的非常有效快捷的工具。,SOCKET-,套接字的引入,9/15/2024,38,套接字存在于通信区域中。通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。套接字通常只与同一区域的套接字交换数据(也有可能跨区域通信,但这只在执行了某种转换进程后才能实现)。,Windows Sockets,只支持一个通信区域:网际域,( AF_INET),,这个域被使用网际协议簇通信的进程使用。,SOCKET-,套接字的引入,9/15/2024,39,在,TCP/IP,网络应用中,通信的两个进程间相互作用的主要模式是客户机,/,服务器模式,(client/server),,即客户向服务器提出请求,服务器接收到请求后,提供相应的服务。,客户机,/,服务器模式,9/15/2024,40,客户机,/,服务器模式的建立基于以下两点:,首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。,其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户机,/,服务器模式的,TCP/IP,。,客户机,/,服务器模式,9/15/2024,41,客户机,/,服务器模式在操作过程中采取的是主动请求的方式。,服务器端:,首先服务器方要先启动,并根据请求提供相应的服务:,打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求。,等待客户请求到达该端口。,接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一个新的进程,(,或线程,),来处理这个客户请求。新进程,(,或线程,),处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。,返回第二步,等待另一客户请求。,关闭服务器。,客户机,/,服务器模式,9/15/2024,42,客户方:,打开一个通信通道,并连接到服务器所在主机的特定端口。,向服务器发服务请求报文,等待并接收应答;继续提出请求。,请求结束后关闭通信通道并终止。,客户机,/,服务器模式,9/15/2024,43,Windows Sockets,是,Microsoft Windows,的网络程序设计接口,它是从,Berkeley Sockets,扩展而来的,以动态链接库的形式提供给我们使用。,Windows Sockets,在继承了,Berkeley Sockets,主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合,Windows,消息驱动特性的网络事件异步选择机制。,Windows Socket,的实现,9/15/2024,44,Windows Sockets 1.1,和,Berkeley Sockets,都是基于,TCP/IP,协议的;,Windows Sockets 2,从,Windows Sockets 1.1,发展而来,与协议无关并向下兼容,可以使用任何底层传输协议提供的通信能力,来为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正实现了底层网络通讯对应用程序的透明。,Windows Socket,的实现,9/15/2024,45,流式套接字(,SOCK_STREAM,),提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。,数据报式套接字(,SOCK_DGRAM,),提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可能丢失或重复,并且接收顺序混乱。,原始套接字(,SOCK_RAW,)。,Socket,类型,9/15/2024,46,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,47,基于,TCP,的,SOCKET,编程,服务器端程序:,1,、创建套接字(,socket,)。,2,、将套接字绑定到一个本地地址和端口上(,bind,)。,3,、将套接字设为监听模式,准备接收客户请求(,listen,)。,4,、等待客户请求到来;当请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(,accept,)。,5,、用返回的套接字和客户端进行通信(,send/,recv,)。,6,、返回,等待另一客户请求。,7,、关闭套接字。,客户端程序:,1,、创建套接字(,socket,)。,2,、向服务器发出连接请求(,connect,)。,3,、和服务器端进行通信(,send/,recv,)。,4,、关闭套接字。,9/15/2024,48,初始化,SOCKET,int,WSAStartup,( WORD,wVersionRequested, LPWSADATA,lpWSAData,);,参数说明,:,wVersionRequested,参数用于指定准备加载的,Winsock,库的版本。高位字节指定所需要的,Winsock,库的副版本,而低位字节则是主版本。可用,MAKEWORD(x,y,)(,其中,,x,是高位字节,,y,是低位字节,),方便地获得,wVersionRequested,的正确值。,lpWSAData,参数是指向,WSADATA,结构的指针,,WSAStartup,用其加载的库版本有关的信息填在这个结构中。,相关函数说明,9/15/2024,49,WSADATA,结构定义如下:,typedef,struct,WSAData,WORD,wVersion,;,WORD,wHighVersion,;,char,szDescription,WSADESCRIPTION_LEN+1;,char,szSystemStatus,WSASYS_STATUS_LEN+1;,unsigned short,iMaxSockets,;,unsigned short,iMaxUdpDg,;,char FAR *,lpVendorInfo,;, WSADATA, *LPWSADATA;,相关函数说明,9/15/2024,50,WSADATA,各个字段说明:,WSAStartup,把第一个字段,wVersion,设成打算使用的,Winsock,版本。,wHighVersion,参数容纳的是现有的,Winsock,库的最高版本。记住,这两个字段中,高位字节代表的是,Winsock,副版本,而低位字节代表的则是,Winsock,主版本。,szDescription,和,szSystemStatus,这两个字段由特定的,Winsock,实施方案设定,事实上没有用。,相关函数说明,9/15/2024,51,不要使用下面这两个字段:,iMaxSockets,和,iMaxUdpDg,,它们是假定同时最多可打开多少套接字和数据报的最大长度。然而,要知道数据报的最大长度应该通过,WSAEnumProtocols,来查询协议信息。同时最多可打开套接字的数目不是固定的,很大程度上和可用物理内存的多少有关。,最后,,lpVendorInfo,字段是为,Winsock,实施方案有关的指定厂商信息预留的。任何一个,Win32,平台上都没有使用这个字段。,相关函数说明,9/15/2024,52,如果,WinSock.dll,或底层网络子系统没有被正确初始化或没有被找到,,WSAStartup,将返回,WSASYSNOTREADY,。此外这个函数允许你的应用程序协商使用某种版本的,WinSock,规范,如果请求的版本等于或高于,DLL,所支持的最低版本,,WSAData,的,wVersion,成员中将包含你的应用程序应该使用的版本,它是,DLL,所支持的最高版本与请求版本中较小的那个。反之,如果请求的版本低于,DLL,所支持的最低版本,,WSAStartup,将返回,WSAVERNOTSUPPORTED,。关于,WSAStartup,更详细的信息,请查阅,MSDN,中的相关部分。,对于每一个,WSAStartup,的成功调用,(,成功加载,WinSock DLL,后,),,在最后都对应一个,WSACleanUp,调用,以便释放为该应用程序分配的资源。,相关函数说明,9/15/2024,53,WSAStartup,用法,WORD,wVersionRequested,;,WSADATA,wsaData,;,int,err;,wVersionRequested,= MAKEWORD( 1, 1 );,err =,WSAStartup,(,wVersionRequested, &,wsaData,);,if ( err != 0 ) ,return;,if ( LOBYTE(,wsaData.wVersion,) != 1 |,HIBYTE(,wsaData.wVersion,) != 1 ) ,WSACleanup,( );,return;,相关函数说明,9/15/2024,54,创建套接字,SOCKET,socket,(,int,af,int,type,int,protocol,);,参数说明,1,、第一个参数,af,指定地址族,对于,TCP/IP,协议的套接字,它只能是,AF_INET(,也可写成,PF_INET),。,2,、第二个参数指定,Socket,类型,对于,1.1,版本的,Socket,,它只支持两种类型的套接字,,SOCK_STREAM,指定产生流式套接字,,SOCK_DGRAM,产生数据报套接字。,3,、第三个参数是与特定的地址家族相关的协议,如果指定为,0,,那么它就会根据地址格式和套接字类别,自动为你选择一个合适的协议。这是推荐使用的一种选择协议的方法。,相关函数说明,9/15/2024,55,返回值,如果这个函数调用成功,它将返回一个新的,SOCKET,数据类型的套接字描述符。如果调用失败,这个函数就会返回一个,INVALID_SOCKET,,错误信息可以通过,WSAGetLastError,函数返回。,相关函数说明,9/15/2024,56,绑定套接字,int,bind ( SOCKET,s, const struct,sockaddr,FAR*,name,int,namelen,);,参数说明:,1,、第一个参数,s,指定要绑定的套接字,,2,、第二个参数指定了该套接字的本地地址信息,是指向,sockaddr,结构的指针变量,,3,、由于该地址结构是为所有的地址家族准备的,这个结构可能(通常会)随所使用的网络协议不同而不同,所以,要用第三个参数指定该地址结构的长度。,相关函数说明,9/15/2024,57,返回值,如果没有发生错误,那么,bind,函数将返回,0,;如果这个函数调用失败,那么将返回,SOCKET_ERROR,,错误信息可以通过,WSAGetLastError,函数返回。,相关函数说明,9/15/2024,58,Sockaddr,结构体说明,struct,sockaddr,u_short,sa_family,;,char sa_data14;,;,sockaddr,的第一个字段,sa_family,指定该地址家族,在这里必须设为,AF_INET,;,sa_data,仅仅是表示要求一块内存分配区,起到占位的作用,该区域中指定与协议相关的具体地址信息。,相关函数说明,9/15/2024,59,Sockaddr_in,结构体说明,由于实际要求的只是内存区,所以对于不同的协议家族,用不同的结构来替换,sockaddr,。除了,sa_family,外,,sockaddr,是按网络字节顺序表示的。在,TCP/IP,中,我们可以用,sockaddr_in,结构替换,sockaddr,,以方便我们填写地址信息。,相关函数说明,9/15/2024,60,struct,sockaddr_in,short,sin_family,;,unsigned short,sin_port,;,struct,in_addr,sin_addr,;,char sin_zero8;,;,相关函数说明,9/15/2024,61,sin_family,表示地址族,对于,IP,地址,,sin_family,成员将一直是,AF_INET,。,sin_port,指定的是将要分配给套接字的端口。,sin_addr,给出的是套接字的主机,IP,地址。,sin_zero,只是一个填充数,以使,sockaddr_in,结构和,sockaddr,结构的长度一样。,对于,sin_addr,,将其指定为,INADDR_ANY,。允许套接字向任何分配给本地机器的,IP,地址发送或接收数据。一般情况下一台机器都只有一个,IP,地址,但是多于一台机器有多个网卡,而每个网卡都有一个,IP,。用,INADDR_ANY,可以简化应用程序的编写。将地址指定为,INADDR_ANY,,允许一个独立应用接受发自多个接口的回应。,相关函数说明,9/15/2024,62,监听套接字,int,listen ( SOCKET,s,int,backlog,);,参数说明:,s:,需要监听的套接字,backlog:,最大连接数,返回值:,如果没有错误发生返回,0,;否则返回,SOCKET_ERROR,相关函数说明,9/15/2024,63,接收请求,SOCKET accept ( SOCKET,s, struct,sockaddr,FAR*,addr,int,FAR*,addrlen,);,参数说明:,s:,接收请求的套接字,addr,:,发送请求的地址,addrlen,:,地址长度,返回值:,如果没有错误发生则返回一个新的套接字;,否则返回,INVALID_SOCKET,相关函数说明,9/15/2024,64,接收数据,int,recv,( SOCKET,s, char FAR*,buf,int,len,int,flags,);,参数说明:,s:,接收端套接字,buf,:,发送字符串,len,:,发送长度,flags:,一般设置为,0,,课在,MSDN,上查询具体含义,返回值:,如果执行成功,则返回接收数据的长度;如果连接关闭则返回,0,;否则返回,SOCKET_ERROR,相关函数说明,9/15/2024,65,发送数据,int,send ( SOCKET,s, const char FAR *,buf,int,len,int,flags,);,参数说明:,s:,发送端套接字,buf,:,发送字符串,len,:,发送字符长度。一般多发送一个字符,flags:,一般设置为,0.,返回值:,执行成功则返回总共发送的字节数;否者返回,SOCKET_ERROR,相关函数说明,9/15/2024,66,连接服务器,int,connect ( SOCKET,s, const struct,sockaddr,FAR*,name,int,namelen,);,参数说明:,s:,请求连接套接字,name:,服务器地址,namelen,:,服务器地址长度。,返回值:,如果执行成功,则返回,0,;否则返回,SOCKET_ERROR,相关函数说明,9/15/2024,67,转换函数,u_long,htonl,(,u_long,hostlong,);,返回一个,32,位的,TCP/IP,的网络字节序。,u_short,htons,(,u_short,hostshort,);,返回一个,16,位的,TCP/IP,网络字节序。,例:,SOCKADDR_IN,addrSrv,;,addrSrv.sin_addr.S_un.S_addr=,htonl,(INADDR_ANY,);,addrSrv.sin_port,=,htons,(6000);,addrSrv.sin_family,=AF_INET;,相关函数说明,9/15/2024,68,unsigned long,inet_addr,( const char FAR *,cp,);,将一个以点分十进制的,IP,地址转化为网络字节序。,char FAR *,inet_ntoa,( struct,in_addr,in,);,将一个网络字节序的,IP,地址转化为以点分十进制表示的,IP,地址。,例:,addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);,inet_ntoa(addrSrv.sin_addr,),;,相关函数说明,9/15/2024,69,包含头文件:,#include,需要添加连接库:,ws2_32.lib,需要的头文件和引用,9/15/2024,70,服务器端:,SOCKET,sockSrv,=socket(AF_INET,SOCK_STREAM,0);/,创建套接字,SOCKADDR_IN,addrSrv,;,addrSrv.sin_addr.S_un.S_addr=,htonl(INADDR_ANY,);,addrSrv.sin_family,=AF_INET;,addrSrv.sin_port,=htons(6000);,/,绑定套接字,bind(sockSrv,(SOCKADDR,*)&,addrSrv,sizeof(SOCKADDR,);,listen(sockSrv,5);/,监听套接字,SOCKADDR_IN,addrClient,;,int,len,=,sizeof(SOCKADDR,);,TCP,编程实例,9/15/2024,71,while (1),SOCKET,sockConn,=,accept(sockSrv,(SOCKADDR,*)&,addrClient,&len,);/,接收套接字请求,char sendBuf100;,sprintf(sendBuf,Welcome,inet_ntoa(addrClient.sin_addr,);,send(sockConn,sendBuf,strlen(sendBuf)+1,0);/,发送消息,char recvBuf100;,recv(sockConn,recvBuf,100,0);/,接收消息,printf(%sn,recvBuf,);,closesocket(sockConn,);/,关闭套接字连接,TCP,编程实例,9/15/2024,72,客户端,/,创建套接字,SOCKET,sockClient,=socket(AF_INET,SOCK_STREAM,0);,SOCKADDR_IN,addrSrv,;/,定义服务器地址,addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);,addrSrv.sin_family,=AF_INET;,addrSrv.sin_port,=htons(6000);/,设定端口,connect(sockClient,(SOCKADDR,*)&,addrSrv,sizeof(SOCKADDR,);/,连接服务器,TCP,编程实例,9/15/2024,73,char recvBuf100;,recv(sockClient,recvBuf,100,0);/,接收消息,printf(%sn,recvBuf,);,printf,(,请输入需要发送内容:,n);,char sendBug100;,scanf(%s,sendBug,);,send(sockClient,sendBug,strlen(sendBug)+1,0);/,发送消息,closesocket(sockClient,);/,关闭套接字,WSACleanup,();/,注销套接字,TCP,编程实例,9/15/2024,74,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,75,基于,UDP,的,Socket,编程,服务器端(接收端),1,、创建套接字(,socket,)。,2,、将套接字绑定到一个本地地址和端口上(,bind,)。,3,、等待接收数据(,recvfrom,)。,4,、关闭套接字。,客户端(发送端),1,、创建套接字(,socket,)。,2,、向服务器发送数据(,sendto,)。,3,、关闭套接字。,9/15/2024,76,与,TCP,相同的部分,初始化套接字,WSAStartup,创建套接字,socket,绑定套接字,bind,相关函数说明,9/15/2024,77,接收消息,int,recvfrom,( SOCKET,s, char FAR*,buf,int,len,int,flags, struct,sockaddr,FAR*,from,int,FAR*,fromlen,);,参数说明:,s:,接收套接字,buf,:,接收消息,len,:,接收消息长度,flags:,一般设置为,0,from:,发送端地址,fromlen,:,地址长度,相关函数说明,9/15/2024,78,返回值:,如果没有错误发生,返回接收到消息的长度;,如果连接被关闭,返回,0,否则,返回,SOCKET_ERROR,例:,SOCKET,sockSrv,=socket(AF_INET,SOCK_DGRAM,0);,char recvBuf100;,SOCKADDR_IN,addrClient,;,int,len,=,sizeof(SOCKADDR,);,recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&,addrClient,&,len,);,相关函数说明,9/15/2024,79,发送消息,int,sendto,( SOCKET,s, const char FAR *,buf,int,len,int,flags, const struct,sockaddr,FAR *,to,int,tolen,);,参数说明:,s:,发送套接字,buf,:,发送消息,len,:,发送消息长度,flags:,一般设置为,0,to:,接收端,IP,地址,tolen,:,地址长度,相关函数说明,9/15/2024,80,返回值,如果没有错误发生,则返回所发送的消息长度;,否则,返回,SOCKET_ERROR,例:,SOCKET,sockClient,=socket(AF_INET,SOCK_DGRAM,0);,SOCKADDR_IN,addrSrv,;,addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);,addrSrv.sin_family,=AF_INET;,addrSrv.sin_port,=htons(6000);,sendto,(sockClient,Hello,strlen(Hello)+1,0,(SOCKADDR*)&,addrSrv,sizeof(SOCKADDR,);,相关函数说明,9/15/2024,81,需要的头文件和引用,包含头文件:,#include,需要添加连接库:,ws2_32.lib,9/15/2024,82,服务器端,/,创建套接字,SOCKET,sockSrv,=socket(AF_INET,SOCK_DGRAM,0);,SOCKADDR_IN,addrSrv,;/,设置服务器地址,addrSrv.sin_addr.S_un.S_addr=,htonl(INADDR_ANY,);,addrSrv.sin_family,=AF_INET;,addrSrv.sin_port,=htons(6000);,/,绑定套接字,bind(sockSrv,(SOCKADDR,*)&,addrSrv,sizeof(SOCKADDR,);,UDP,编程实例,9/15/2024,83,SOCKADDR_IN,addrClient,;/,定义客户端地址,int,len,=,sizeof(SOCKADDR,);/,获取地址长度,char recvBuf100;,/,接收消息,recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&,addrClient,&len,);,printf(%sn,recvBuf,);,closesocket(sockSrv,);/,关闭套接字,WSACleanup,();/,注销套接字,UDP,编程实例,9/15/2024,84,客户端,SOCKET,sockClient,=socket(AF_INET,SOCK_DGRAM,0);,SOCKADDR_IN,addrSrv,;/,设置服务器地址,addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);,addrSrv.sin_family,=AF_INET;,addrSrv.sin_port,=htons(6000);,/,发送消息,sendto(sockClient,Hello,strlen(Hello)+1,0,(SOCKADDR*)&,addrSrv,sizeof(SOCKADDR,);,closesocket(sockClient,);/,关闭套接字,WSACleanup,();/,注销套接字,UDP,编程实例,9/15/2024,85,Overview,课程介绍,计算机网络简介,OSI,七层参考模型,TCP/IP,模型,SOCKET,介绍,基于,TCP,的,SOCKET,编程,基于,UDP,的,SOCKET,编程,参考资料,9/15/2024,86,1,蒋东兴、林鄂华,,Windows Sockets,网络程序设计指南,北京:清华大学出版社,,1995.12,2 Martin Hall,等,,Windows Sockets - An Open Interface for Network Programming under Microsoft Windows, USA,:,WinSock Group, January, 1993.,3,周明天、汪义勇编,,TCP/IP,网络编程原理与技术, 北京:清华大学出版社,,1993.12,4,网络收集,,WindowsSockets,规范及应用,参考资料,9/15/2024,87,Question?,THANK YOU,9/15/2024,88,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!