CP(IP)协议与网络编程

上传人:仙*** 文档编号:163626022 上传时间:2022-10-22 格式:PPT 页数:88 大小:513.50KB
收藏 版权申诉 举报 下载
CP(IP)协议与网络编程_第1页
第1页 / 共88页
CP(IP)协议与网络编程_第2页
第2页 / 共88页
CP(IP)协议与网络编程_第3页
第3页 / 共88页
资源描述:

《CP(IP)协议与网络编程》由会员分享,可在线阅读,更多相关《CP(IP)协议与网络编程(88页珍藏版)》请在装配图网上搜索。

1、2022-10-16TCP/IP协议与网络编程Version1.02010年年6月月2022-10-162Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UDP的SOCKET编程n 参考资料 2022-10-163n 课程目标n 预备知识n 目标听众n 日程表n 词汇表课程介绍课程介绍2022-10-164n 了解计算机网络的构成n 了解OSI七层网络模型n 了解TCP/IP网络模型n 理解SOCKETn 能使用SOCKET进行网络编程课程目标课程目标2022-10-165n C+语言基础n 对

2、计算机网络以及网络编程有一定了解预备知识预备知识2022-10-166n 程序员目标听众目标听众2022-10-167n 共计:0.5天n 详细安排课程介绍课程介绍 计算机网络简介计算机网络简介OSI七层网络模型介绍七层网络模型介绍TCP/IP网络模型介绍网络模型介绍SOCKET介绍介绍TCP编程编程UDP编程编程Total:hours日程表日程表2022-10-168n OSI-Open System Interconnectionn TCP/IP-Transmission Control Protocol/Internet Protocol n SOCKET-套接字词汇表词汇表2022-1

3、0-169Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UDP的SOCKET编程n 参考资料 2022-10-1610n 计算机网络是指将有独立功能的多台计算机,通过通信设备线路连接起来,在网络软件的支持下,实现彼此之间资源共享和数据通信的整个系统。什么是计算机网络?什么是计算机网络?2022-10-1611n 计算机网络的基本功能是数据通信和资源共享。计算机网络的基本功能计算机网络的基本功能2022-10-1612n 按照覆盖范围可分为:l 局域网l 城域网l 广域网n 按照介质课分为:l

4、有线网络l 无线网络l 微波网络n 问题:校园网属于什么网络?计算机网络的分类计算机网络的分类2022-10-1613AB网络网络协议协议协议协议端端口口号号端端口口号号计算机网络如何进行通信计算机网络如何进行通信2022-10-1614n IP网络中每台主机都必须有一个惟一的IP地址;n IP地址是一个逻辑地址;n 因特网上的IP地址具有全球唯一性;n 32位,4个字节,常用点分十进制的格式表示,例如:IP地址地址2022-10-1615n 为进行网络中的数据交换(通信)而建立的规则、标准或约定。(=语义+语法+规则)n 不同层具有各自不同的协议。协议协议2022-10-1616n 多种通信

5、媒介有线、无线n 不同种类的设备通用、专用n 不同的操作系统Unix、Windows n 不同的应用环境固定、移动n 不同业务种类分时、交互、实时n 用户业务的延续性不允许出现大的跌宕起伏。他们相互交织,构成了非常复杂的网络环境网络异质性网络异质性2022-10-1617n 网络体系结构解决异质性问题采用的是分层方法 把复杂的网络互联问题划分为若干个较小的、单一的问题,在不同层上予以解决。网络异质性的解决网络异质性的解决2022-10-1618Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UD

6、P的SOCKET编程n 参考资料 2022-10-1619n OSI(Open System Interconnection)参考模型将网络的不同功能划分为7层。OSI七层参考模型七层参考模型应用层表示层物理层会话层传输层网络层数据链路层处理网络应用数据表示主机间通信端到端的连接寻址和最短路径介质访问(接入)二进制传输2022-10-1620n 通信实体的对等层之间不允许直接通信。n 各层之间是严格单向依赖。n 上层使用下层提供的服务 Service user;n 下层向上层提供服务 Service provider。OSI七层参考模型七层参考模型2022-10-1621网络对等通信示例网络对

7、等通信示例我们是朋友我们是朋友We are friendWe are friend传真传真中国人中国人翻译翻译秘书秘书私友私友We are friendWe are friend传真传真日本人日本人翻译翻译秘书秘书对交谈内容的共识对交谈内容的共识用英语对话用英语对话使用传真通信使用传真通信物理通信线路物理通信线路2022-10-1622n 对等层实体之间虚拟通信。n 下层向上层提供服务,实际通信在最底层完成。网络对等通信的实质网络对等通信的实质2022-10-1623n 应用层:l 远程登录协议Telnetl 文件传输协议FTPl 超文本传输协议HTTPl 域名服务DNSl 简单邮件传输协议S

8、MTPl 邮局协议POP3OSI各层使用协议简介各层使用协议简介2022-10-1624n 传输层:l 传输控制协议TCP:面向连接的可靠的传输协议l 用户数据报协议UDP:是无连接的,不可靠的传输协议OSI各层使用协议简介各层使用协议简介2022-10-1625n 网络层:l 网际协议IPl Internet互联网控制报文协议ICMPl Internet组管理协议IGMPOSI各层使用协议简介各层使用协议简介2022-10-1626n 一台计算机要发送数据到另一台计算机,数据首先必须打包,打包的过程称为封装。n 封装就是在数据前面加上特定的协议头部。数据封装数据封装数据数据数据数据协议头协议

9、头2022-10-1627n OSI参考模型中,对等层协议之间交换的信息单元统称为协议数据单元(PDU,Protocol Data Unit)。n OSI参考模型中每一层都要依靠下一层提供的服务。n 为了提供服务,下层把上层的PDU作为本层的数据封装,然后加入本层的头部(和尾部)。头部中含有完成数据传输所需的控制信息。数据封装数据封装2022-10-1628n 数据自上而下递交的过程实际上就是不断封装的过程。到达目的地后自下而上递交的过程就是不断拆封的过程。由此可知,在物理线路上传输的数据,其外面实际上被包封了多层“信封”。n 某一层只能识别由对等层封装的“信封”,而对于被封装在“信封”内部的

10、数据仅仅是拆封后将其提交给上层,本层不作任何处理。数据封装数据封装2022-10-1629Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UDP的SOCKET编程n 参考资料 2022-10-1630n TCP/IP起源于美国国防部高级研究规划署(DARPA)的一项研究计划实现若干台主机的相互通信。n 现在TCP/IP已成为Internet上通信的工业标准。TCP/IP模型模型2022-10-1631n TCP/IP模型包括4个层次:l 应用层l 传输层l 网络层l 网络接口TCP/IP模型的分

11、层模型的分层2022-10-1632TCP/IP与与OSI的对应关系的对应关系应用层应用层表示层表示层会话层会话层传输层传输层物理层物理层数据链路层数据链路层网络层网络层7654321OSI参考模型参考模型应用层应用层传输层传输层网络接口网络接口网络层网络层TCP/IP模型模型2022-10-1633n 按照OSI七层模型的描述,传输层提供进程(应用程序)通信的能力。为 了标识通信实体中进行通信的进程(应用程序),TCP/IP协议提出了协议端口(protocol port,简称端口)的概念。n 端口是一种抽象的软件结构。应用程序通过系统调用与某端口建立连接(binding)后,传输层传给该端口

12、的数据都被相应的进程所接收,相应进程发给传输层的数据都通过该端口输出。端口端口2022-10-1634n 端口用一个整数型标识符来表示,即端口号。端口号跟协议相关,TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立。n 端口使用一个16位的数字来表示,它的范围是065535,1024以下的端口号保留给预定义的服务。例如:http使用80端口。端口端口2022-10-1635Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UDP的SOCKET编程n 参考

13、资料 2022-10-1636n 我们开发网络应用程序是否需要我们手工的去封装我们需要传输的数据?如何开发网络应用程序如何开发网络应用程序2022-10-1637n 为了能够方便的开发网络应用软件,由美国伯克利大学在Unix上推出了一种应用程序访问通信协议的操作系统调用socket(套接字)。socket的出现,使程序员可以很方便地访问TCP/IP,从而开发各种网络应用的程序。SOCKET-套接字的引入套接字的引入2022-10-1638n 随着Unix的应用推广,套接字在编写网络软件中得到了极大的普及。后来,套接字又被引进了Windows等操作系统,成为开发网络应用程序的非常有效快捷的工具。

14、SOCKET-套接字的引入套接字的引入2022-10-1639n 套接字存在于通信区域中。通信区域也叫地址族,它是一个抽象的概念,主要用于将通过套接字通信的进程的共有特性综合在一起。套接字通常只与同一区域的套接字交换数据(也有可能跨区域通信,但这只在执行了某种转换进程后才能实现)。Windows Sockets只支持一个通信区域:网际域(AF_INET),这个域被使用网际协议簇通信的进程使用。SOCKET-套接字的引入套接字的引入2022-10-1640n 在TCP/IP网络应用中,通信的两个进程间相互作用的主要模式是客户机/服务器模式(client/server),即客户向服务器提出请求,服

15、务器接收到请求后,提供相应的服务。客户机客户机/服务器模式服务器模式2022-10-1641n 客户机/服务器模式的建立基于以下两点:l 首先,建立网络的起因是网络中软硬件资源、运算能力和信息不均等,需要共享,从而造就拥有众多资源的主机提供服务,资源较少的客户请求服务这一非对等作用。l 其次,网间进程通信完全是异步的,相互通信的进程间既不存在父子关系,又不共享内存缓冲区,因此需要一种机制为希望通信的进程间建立联系,为二者的数据交换提供同步,这就是基于客户机/服务器模式的TCP/IP。客户机客户机/服务器模式服务器模式2022-10-1642n 客户机/服务器模式在操作过程中采取的是主动请求的方

16、式。n 服务器端:l 首先服务器方要先启动,并根据请求提供相应的服务:l 打开一个通信通道并告知本地主机,它愿意在某一地址和端口上接收客户请求。l 等待客户请求到达该端口。l 接收到重复服务请求,处理该请求并发送应答信号。接收到并发服务请求,要激活一个新的进程(或线程)来处理这个客户请求。新进程(或线程)处理此客户请求,并不需要对其它请求作出应答。服务完成后,关闭此新进程与客户的通信链路,并终止。l 返回第二步,等待另一客户请求。l 关闭服务器。客户机客户机/服务器模式服务器模式2022-10-1643n 客户方:客户方:l 打开一个通信通道,并连接到服务器所在主机的特定端口。l 向服务器发服

17、务请求报文,等待并接收应答;继续提出请求。l 请求结束后关闭通信通道并终止。客户机客户机/服务器模式服务器模式2022-10-1644n Windows Sockets是Microsoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,以动态链接库的形式提供给我们使用。Windows Sockets在继承了Berkeley Sockets主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Windows消息驱动特性的网络事件异步选择机制。Windows Socket的实现的实现2022-10-1645n Windows S

18、ockets 1.1和Berkeley Sockets都是基于TCP/IP协议的;Windows Sockets 2从Windows Sockets 1.1发展而来,与协议无关并向下兼容,可以使用任何底层传输协议提供的通信能力,来为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正实现了底层网络通讯对应用程序的透明。Windows Socket的实现的实现2022-10-1646n 流式套接字(SOCK_STREAM)提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。n 数据报式套接字(SOCK_DGRAM)提供无连接服务。数据包以独立包形式发送,不

19、提供无错保证,数据可能丢失或重复,并且接收顺序混乱。n 原始套接字(SOCK_RAW)。Socket类型类型2022-10-1647Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UDP的SOCKET编程n 参考资料 2022-10-1648基于基于TCP的的SOCKET编程编程服务器端程序:服务器端程序:1、创建套接字(socket)。2、将套接字绑定到一个本地地址和端口上(bind)。3、将套接字设为监听模式,准备接收客户请求(listen)。4、等待客户请求到来;当请求到来后,接受连接请求

20、,返回一个新的对应于此次连接的套接字(accept)。5、用返回的套接字和客户端进行通信(send/recv)。6、返回,等待另一客户请求。7、关闭套接字。客户端程序:客户端程序:1、创建套接字(socket)。2、向服务器发出连接请求(connect)。3、和服务器端进行通信(send/recv)。4、关闭套接字。2022-10-1649n 初始化SOCKETint WSAStartup(WORD wVersionRequested,LPWSADATA lpWSAData);参数说明参数说明:l wVersionRequested参数用于指定准备加载的Winsock库的版本。高位字节指定所需

21、要的Winsock库的副版本,而低位字节则是主版本。可用MAKEWORD(x,y)(其中,x是高位字节,y是低位字节)方便地获得wVersionRequested的正确值。l lpWSAData参数是指向WSADATA结构的指针,WSAStartup用其加载的库版本有关的信息填在这个结构中。相关函数说明相关函数说明2022-10-1650n WSADATA结构定义如下:typedef struct WSAData WORD wVersion;WORD wHighVersion;char szDescriptionWSADESCRIPTION_LEN+1;char szSystemStatusW

22、SASYS_STATUS_LEN+1;unsigned short iMaxSockets;unsigned short iMaxUdpDg;char FAR*lpVendorInfo;WSADATA,*LPWSADATA;相关函数说明相关函数说明2022-10-1651n WSADATA各个字段说明:l WSAStartup把第一个字段wVersion设成打算使用的Winsock版本。l wHighVersion 参数容纳的是现有的Winsock库的最高版本。记住,这两个字段中,高位字节代表的是Winsock副版本,而低位字节代表的则是Winsock主版本。l szDescription和s

23、zSystemStatus这两个字段由特定的Winsock实施方案设定,事实上没有用。相关函数说明相关函数说明2022-10-1652l 不要使用下面这两个字段:iMaxSockets和iMaxUdpDg,它们是假定同时最多可打开多少套接字和数据报的最大长度。然而,要知道数据报的最大长度应该通过WSAEnumProtocols来查询协议信息。同时最多可打开套接字的数目不是固定的,很大程度上和可用物理内存的多少有关。l 最后,lpVendorInfo字段是为Winsock实施方案有关的指定厂商信息预留的。任何一个Win32平台上都没有使用这个字段。相关函数说明相关函数说明2022-10-1653

24、如果WinSock.dll或底层网络子系统没有被正确初始化或没有被找到,WSAStartup将返回WSASYSNOTREADY。此外这个函数允许你的应用程序协商使用某种版本的WinSock规范,如果请求的版本等于或高于DLL所支持的最低版本,WSAData的wVersion成员中将包含你的应用程序应该使用的版本,它是DLL所支持的最高版本与请求版本中较小的那个。反之,如果请求的版本低于DLL所支持的最低版本,WSAStartup将返回WSAVERNOTSUPPORTED。关于WSAStartup更详细的信息,请查阅MSDN中的相关部分。对于每一个WSAStartup的成功调用(成功加载WinS

25、ock DLL后),在最后都对应一个WSACleanUp调用,以便释放为该应用程序分配的资源。相关函数说明相关函数说明2022-10-1654n 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();ret

26、urn;相关函数说明相关函数说明2022-10-1655n 创建套接字SOCKET socket(int af,int type,int protocol);l 参数说明1、第一个参数af指定地址族,对于TCP/IP协议的套接字,它只能是AF_INET(也可写成PF_INET)。2、第二个参数指定Socket类型,对于1.1版本的Socket,它只支持两种类型的套接字,SOCK_STREAM指定产生流式套接字,SOCK_DGRAM产生数据报套接字。3、第三个参数是与特定的地址家族相关的协议,如果指定为0,那么它就会根据地址格式和套接字类别,自动为你选择一个合适的协议。这是推荐使用的一种选择协议

27、的方法。相关函数说明相关函数说明2022-10-1656l 返回值如果这个函数调用成功,它将返回一个新的SOCKET数据类型的套接字描述符。如果调用失败,这个函数就会返回一个INVALID_SOCKET,错误信息可以通过WSAGetLastError函数返回。相关函数说明相关函数说明2022-10-1657n 绑定套接字int bind(SOCKET s,const struct sockaddr FAR*name,int namelen);l 参数说明:1、第一个参数s指定要绑定的套接字,2、第二个参数指定了该套接字的本地地址信息,是指向sockaddr结构的指针变量,3、由于该地址结构是为

28、所有的地址家族准备的,这个结构可能(通常会)随所使用的网络协议不同而不同,所以,要用第三个参数指定该地址结构的长度。相关函数说明相关函数说明2022-10-1658l 返回值如果没有发生错误,那么bind函数将返回0;如果这个函数调用失败,那么将返回SOCKET_ERROR,错误信息可以通过WSAGetLastError函数返回。相关函数说明相关函数说明2022-10-1659n Sockaddr结构体说明struct sockaddr u_short sa_family;char sa_data14;sockaddr的第一个字段sa_family指定该地址家族,在这里必须设为AF_INET;

29、sa_data仅仅是表示要求一块内存分配区,起到占位的作用,该区域中指定与协议相关的具体地址信息。相关函数说明相关函数说明2022-10-1660n Sockaddr_in结构体说明由于实际要求的只是内存区,所以对于不同的协议家族,用不同的结构来替换sockaddr。除了sa_family外,sockaddr是按网络字节顺序表示的。在TCP/IP中,我们可以用sockaddr_in结构替换sockaddr,以方便我们填写地址信息。相关函数说明相关函数说明2022-10-1661struct sockaddr_in short sin_family;unsigned short sin_port

30、;struct in_addr sin_addr;char sin_zero8;相关函数说明相关函数说明2022-10-1662lsin_family表示地址族,对于IP地址,sin_family成员将一直是AF_INET。lsin_port指定的是将要分配给套接字的端口。lsin_addr给出的是套接字的主机IP地址。lsin_zero只是一个填充数,以使sockaddr_in结构和sockaddr结构的长度一样。对于sin_addr,将其指定为INADDR_ANY。允许套接字向任何分配给本地机器的IP地址发送或接收数据。一般情况下一台机器都只有一个IP地址,但是多于一台机器有多个网卡,而每

31、个网卡都有一个IP。用INADDR_ANY可以简化应用程序的编写。将地址指定为INADDR_ANY,允许一个独立应用接受发自多个接口的回应。相关函数说明相关函数说明2022-10-1663n 监听套接字int listen(SOCKET s,int backlog);l 参数说明:s:需要监听的套接字backlog:最大连接数l 返回值:如果没有错误发生返回0;否则返回SOCKET_ERROR相关函数说明相关函数说明2022-10-1664n 接收请求SOCKET accept(SOCKET s,struct sockaddr FAR*addr,int FAR*addrlen);l 参数说明:

32、s:接收请求的套接字addr:发送请求的地址addrlen:地址长度l 返回值:如果没有错误发生则返回一个新的套接字;否则返回INVALID_SOCKET 相关函数说明相关函数说明2022-10-1665n 接收数据int recv(SOCKET s,char FAR*buf,int len,int flags);l 参数说明:s:接收端套接字buf:发送字符串len:发送长度flags:一般设置为0,课在MSDN上查询具体含义l 返回值:如果执行成功,则返回接收数据的长度;如果连接关闭则返回0;否则返回SOCKET_ERROR 相关函数说明相关函数说明2022-10-1666n 发送数据in

33、t send(SOCKET s,const char FAR*buf,int len,int flags);l 参数说明:s:发送端套接字buf:发送字符串len:发送字符长度。一般多发送一个字符flags:一般设置为0.l 返回值:执行成功则返回总共发送的字节数;否者返回SOCKET_ERROR 相关函数说明相关函数说明2022-10-1667n 连接服务器int connect(SOCKET s,const struct sockaddr FAR*name,int namelen);l 参数说明:s:请求连接套接字name:服务器地址namelen:服务器地址长度。l 返回值:如果执行成功

34、,则返回0;否则返回SOCKET_ERROR相关函数说明相关函数说明2022-10-1668n 转换函数lu_long htonl(u_long hostlong);返回一个32位的TCP/IP的网络字节序。lu_short htons(u_short hostshort);返回一个16位的TCP/IP网络字节序。l 例:SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_port=htons(6000);addrSrv.sin_family=AF_INET;相关函数说明相关函数说明202

35、2-10-1669l unsigned long inet_addr(const char FAR*cp);将一个以点分十进制的IP地址转化为网络字节序。l char FAR*inet_ntoa(struct in_addr in);将一个网络字节序的IP地址转化为以点分十进制表示的IP地址。l 例:addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);inet_ntoa(addrSrv.sin_addr);相关函数说明相关函数说明2022-10-1670n 包含头文件:#includen 需要添加连接库:ws2_32.lib需要的头文件和引用需要

36、的头文件和引用2022-10-1671n 服务器端: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 addrClie

37、nt;int len=sizeof(SOCKADDR);TCP编程实例编程实例2022-10-1672while(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);/接收消息prin

38、tf(%sn,recvBuf);closesocket(sockConn);/关闭套接字连接TCP编程实例编程实例2022-10-1673n 客户端/创建套接字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*)&ad

39、drSrv,sizeof(SOCKADDR);/连接服务器TCP编程实例编程实例2022-10-1674char 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编程实例编程实例2022-10-1675

40、Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UDP的SOCKET编程n 参考资料 2022-10-1676基于基于UDP的的Socket编程编程服务器端(接收端)服务器端(接收端)1、创建套接字(socket)。2、将套接字绑定到一个本地地址和端口上(bind)。3、等待接收数据(recvfrom)。4、关闭套接字。客户端(发送端)客户端(发送端)1、创建套接字(socket)。2、向服务器发送数据(sendto)。3、关闭套接字。2022-10-1677n 与TCP相同的部分l 初始化套接

41、字WSAStartupl 创建套接字socketl 绑定套接字bind相关函数说明相关函数说明2022-10-1678n 接收消息int recvfrom(SOCKET s,char FAR*buf,int len,int flags,struct sockaddr FAR*from,int FAR*fromlen);l 参数说明:s:接收套接字buf:接收消息len:接收消息长度flags:一般设置为0from:发送端地址fromlen:地址长度相关函数说明相关函数说明2022-10-1679l 返回值:如果没有错误发生,返回接收到消息的长度;如果连接被关闭,返回0否则,返回SOCKET_E

42、RRORl 例: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);相关函数说明相关函数说明2022-10-1680n 发送消息int sendto(SOCKET s,const char FAR*buf,int len,int flags,const struct sockaddr FAR*to,int tole

43、n);l 参数说明:s:发送套接字buf:发送消息len:发送消息长度flags:一般设置为0to:接收端IP地址tolen:地址长度相关函数说明相关函数说明2022-10-1681l 返回值如果没有错误发生,则返回所发送的消息长度;否则,返回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=hto

44、ns(6000);sendto(sockClient,Hello,strlen(Hello)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);相关函数说明相关函数说明2022-10-1682需要的头文件和引用需要的头文件和引用n 包含头文件:#includen 需要添加连接库:ws2_32.lib2022-10-1683n 服务器端/创建套接字SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_IN addrSrv;/设置服务器地址addrSrv.sin_addr.S_un.S_addr=htonl(INA

45、DDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);/绑定套接字bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);UDP编程实例编程实例2022-10-1684SOCKADDR_IN addrClient;/定义客户端地址int len=sizeof(SOCKADDR);/获取地址长度char recvBuf100;/接收消息recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);printf(%sn,r

46、ecvBuf);closesocket(sockSrv);/关闭套接字WSACleanup();/注销套接字UDP编程实例编程实例2022-10-1685n 客户端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(H

47、ello)+1,0,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);closesocket(sockClient);/关闭套接字WSACleanup();/注销套接字UDP编程实例编程实例2022-10-1686Overviewn 课程介绍n 计算机网络简介n OSI七层参考模型n TCP/IP模型n SOCKET介绍n 基于TCP的SOCKET编程n 基于UDP的SOCKET编程n 参考资料 2022-10-16871 蒋东兴、林鄂华,Windows Sockets网络程序设计指南,北京:清华大学出版社,1995.122 Martin Hall等,Windows Sockets-An Open Interface for Network Programming under Microsoft Windows,USA:WinSock Group,January,1993.3 周明天、汪义勇编,TCP/IP网络编程原理与技术,北京:清华大学出版社,1993.124 网络收集,WindowsSockets规范及应用参考资料参考资料2022-10-1688Question?THANK YOU

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

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

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


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