毕业论文基于p2p网络通信平台的研究与实现.doc

上传人:仙人指路1688 文档编号:3973087 上传时间:2023-03-30 格式:DOC 页数:22 大小:673KB
返回 下载 相关 举报
毕业论文基于p2p网络通信平台的研究与实现.doc_第1页
第1页 / 共22页
毕业论文基于p2p网络通信平台的研究与实现.doc_第2页
第2页 / 共22页
毕业论文基于p2p网络通信平台的研究与实现.doc_第3页
第3页 / 共22页
毕业论文基于p2p网络通信平台的研究与实现.doc_第4页
第4页 / 共22页
毕业论文基于p2p网络通信平台的研究与实现.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

《毕业论文基于p2p网络通信平台的研究与实现.doc》由会员分享,可在线阅读,更多相关《毕业论文基于p2p网络通信平台的研究与实现.doc(22页珍藏版)》请在三一办公上搜索。

1、本科毕业论文 题 目基于P2P网络通信平台的研究与实现姓 名学 号专 业计算机科学与技术指导教师职 称讲师 中国武汉 目 录摘 要II关键词IIAbstractIIKeywordsII1 前言11.1 P2P概述11.2 研究的背景和意义11.3 P2P网络和传统网络的对比11.4 P2P网络的应用21.5 课题主要研究内容22 项目体系结构及原理22.1 集中式P2P网络结构22.2 完全分布式非结构化P2P网络32.3 混合式P2P网络32.4 阻塞和非阻塞43 P2P网络通信平台的设计43.1 总体设计目标43.2 系统功能模块设计43.2.1服务器功能模块设计43.3 结构化P2P网络

2、(DHT网络)文件路由算法63.3.1 DHT路由原理63.3.2 Chord路由算法63.3.3 Pastry路由算法73.3.4 CAN路由算法74 P2P网络通信平台的实现74.1即时通信系统的实现74.1.1客户端与服务器建立连接74.1.2客户端之间建立连接84.1.3利用P2P网络穿越实现通信84.2 利用socket编程创建端口94.2.1 端口的定义94.2.2 socket类型104.2.3 Socket实现代码(服务器端)105 软件功能测试及验证126 软件不足与改进办法16总结17参考文献17致 谢18基于P2P网络通信平台的研究与实现摘 要基于P2P网络的通信平台最大

3、的功能就是即时的信息交流,只要能跟对方建立连接,都可以通过该平台与之进行实时通信。本系统为集中式P2P网络,由客户端和服务器端组成。服务器可以部署在同一网段内的任一节点上,但是其功能主要转向于用户数据记录和索引转发。客户端只需完成注册和正常登陆后,在很大程度上便与服务器脱离开来,P2P的对等网络结构很大程度上缓解了传统服务器的通讯压力。客户端只要填写服务器IP地址和端口号,就可以登录和使用,从而实现点对点的通信。本平台既可在互联网上使用,也可以在同一个网段的局域网内进行通信.该软件用TXT文件存储用户信息,用套接字连接客户端和服务器,用数据报发送消息。使用该软件可以进行文件的传输以及信息交流。

4、关键词客户端;服务器;套接字;P2P网络Internetwork Communication Based On P2PAbstractThe largest function of P2P-based network communication tools is the real-time information exchange. As long as two users could establish a connection, they can pass through the chat tool for communication at any time.The system uses

5、 P2P mode of construction, including the client and the server. The server can be deployed in any node of the same network segment. So this can be convenient for maintenance, ensure the same network segments information safety and make full use of network resources. The client simply fills out the s

6、ervers IP address and port number and connects with the server successful then the client can chat with others.Chat tools provided by the current network company can be used after connected to the Internet so this limits the scope of customers to some extent. There is no restriction about this tool

7、in this respect.As long as the users are in the same network segment ,they will be able to communicate. The software stores the users information in a TXT file. The software uses the socket connection client with server. Send a message with the data package.The users can get communicated with each o

8、ther by this software,also transfer files.KeywordsClient; server; socket; P2P-network1 前言1.1 P2P概述P2P(Peer To Peer)即对等计算或对等网络,可以简单地定义成通过交换来共享计算机资源和服务。在P2P网络环境中,所有彼此相连的计算机都处于对等地位,整个网络一般来讲不依赖于专用的集中服务器。网络中的每一台计算机既能充当网络服务的请求者,又能对其他计算机提供资源与服务,如信息的共享与交换、计算资源(CPU共享)、存储资源(如缓存和磁盘空间的使用)等。1.2 研究的背景和意义随着网络和人们的生

9、活联系的越来越紧密,人们不再只满足通过传统的媒介进行信息的传递和相互的交流,通过网络这个新兴的媒介进行信息交流成为一种需要,因为计算机技术和网络技术比其它传统媒介具有更多的先天优势,例如数据量大,实时性强,操作简单,成本低等优点。P2P网络最大的特点就是能够让人们通过互联网就进行直接交互。P2P使得网络上的沟通变得容易、更直接共享和交互,真正地消除中间商。P2P就是人们可以直接连接到其他用户的计算机、交换文件,而不是像过去那样连接到服务器去浏览与下载。P2P另一个重要特点是改变互联网现在的以大网站为中心的状态、重返“非中心化”,并把权力交还给用户。P2P看起来似乎很新,但是正如B2C、B2B是

10、将现实世界中很平常的东西移植到互联网上一样,P2P并不是什么新东西。在现实生活中我们每天都按照P2P模式面对面地或者通过电话交流和沟通。P2P网络技术正处在发展时期,同时也与我们生活息息相关。譬如现在主流的下载工具BT,电驴,还有PPLive网络视频,都是基于P2P技术体系。跟传统的C/S体系相比较而言,P2P网络应用系统容量大、扩散性强,计算机资源利用率高,在网络通信效率以及安全稳定性方面都有其独到的优势(杨天路,2007)。网络上现有的许多服务可以归入P2P的行列。即时讯息系统譬如ICQ、AOL Instant Messenger、Yahoo Pager、微软的MSN Messenger以

11、及国内的OICQ是最流行的P2P应用。它们允许用户互相沟通和交换信息、交换文件。本课题便是以上述优秀的P2P成果为参照,进行研究和探索。研究本课题可以对P2P的体系结构有更为细致和准确了解,也能更深层的了解和分析P2P网络底层通信的机制和原理。此外,进行P2P网络技术的研究可以使网络上的资源得到充分利用和最大化的共享。1.3 P2P网络和传统网络的对比在P2P网络中,弱化了服务器的功能,甚至取消服务器,任意两台PC互为服务器/客户机,即使只有一个对等点存在网络也是出于活动状态的, 节点所有者可以随意地将自己的信息发布到网络上。P2P技术可以实现信息数据成本资源向所有用户计算机均匀分布,即“边缘

12、化”趋势。在传统的C/S模式中,客户端之间要进行文件交换必须经过服务器,一旦服务器崩溃,整个网络也随之瘫痪。而在P2P网络中每个节点的地位对等,每个节点即可充当服务器位其他节点提供服务,也可作为客户端享受其他节点提供的服务。由于每个节点在工作时都在相网络贡献资源,所以,对等点越多,网络的性能就越好,这一点也是其与传统C/S模式的重要区别之一。图 1 C/S模式 图2 P2P模式Fig. 1 C/S mode Fig. 2 Peer To Peer mode1.4 P2P网络的应用(1)对等计算对等计算的本质就是网络上CPU资源的共享。采用P2P技术的对等计算,正是把网络中的众多计算机暂时不用计

13、算能力连接起来,使用积累的能力执行超级计算机的任务。任何需要大量数据处理的行业都可从中获利。(2)搜索引擎P2P技术的另一个优势就是开发出强大的搜索工具。P2P技术使用户可以深度搜索文档,而且这种搜索无需通过Web服务器,也可以不受信息文档格式和宿主设备的限制,可达到传统目录式搜索引擎器无可比拟的深度。(3)文件共享利用P2P技术,网上计算机之间可以进行直接交互,而不需要使用中央服务器。也正是这一点,直接引发了P2P技术研究的热潮。在P2P网络中,对等机通过不同的查询机制定位含有所需资源的其他对等机后,将直接与其建立连接,并下载所需文件和信息。1.5 课题主要研究内容(1)深入了解P2P网络底

14、层的通信构架(2)设计P2P网络通信平台(3)分析平台系统中服务器与客户端建立连接的过程(4)分析客户端与客户端建立连接的过程2 项目体系结构及原理2.1 集中式P2P网络结构集中式P2P网络形式上有一个中心服务器来负责记录共享信息以及回答对这些信息的查询(陈善广,2007)。每一个对等实体对它将要共享的信息以及进行的通信负责,根据需要选择所要进行的通讯的对象或者下载它所需要的其他对等实体上的信息。这种形式具有中心化的特点,但是它不同于传统意义上的C/S(客户端/服务器)模式。传统意义上的C/S模式采用的是一种垄断的手段,所有资源都存放在服务器上,客户机只能被动地从服务器上读取信息,并且客户机

15、之间不具有交互能力。而集中式P2P网络则是所有网上提供的资料都分别存放在提供该资料的客户机上,服务器上只保留索引信息,此外,服务器与对等实体以及对等实体之间都具有交互能力(杨天路,2007)。采用集中式P2P形式的软件被陈为第一代P2P,其代表性的软件为Napster,本设计也属于此类。这种形式有一个中央服务器,为用户提供共享和搜索文件服务。这就要求有一个连续运转的服务器,并且一旦该服务器被关闭,整个网络就会停止运作。此外,这样的服务器必须能够处理大量的用户连接,拥有足够的内存和磁盘空间来维护和搜索文件列表。集中式P2P网络结构图下图所示服务器(索引服务)索引服务PC1PC2PC3PC4PC5

16、查询流下载流图3 集中式P2P网络构架Fig. 3 Centralized P2P Network Architecture2.2 完全分布式非结构化P2P网络完全分布式非结构化拓扑的P2P网络采用了随机图的组织方式来形成一个松散的网络,这种结构对网络的动态变化有较好的容错能力,因此具有较好的可用性。同时,这种结构支持复杂查询,比如带有规则表达式的关键字查询、模糊查询等。完全分布式非结构化拓扑的P2P网络的典型代表是Gnutella(杨天路,2007)。完全分布式非结构化P2P网络和集中式P2P网络最大的区别在于前者没有中心服务器,它采用了完全随机图的洪泛式搜索和随机转发机制。完全分布式非结构

17、化拓扑的优点是网络设置简单,不需要服务器支持,在网络规模较小的时候具有很高的查询率。但由于在这种拓扑的网络中多采用洪泛式查询和定位资源,随着联网节点的增加,网络规模不断增大,会给网络带来沉重的网络负载。而且由于没有确定的拓扑,这种形式的网络无法保证查找资源的去定性,可能会漏过网络中的部分资源。另一个问题是由于采用了TTL(Time To Live,生存时间)、洪泛或有选择转发算法,这种拓扑的网络直径不可控,可扩展性较差。图4 分布式非结构化P2P网络Fig. 4 Distributed Unstructured P2P Network2.3 混合式P2P网络混合式P2P形式结合了集中式和分布式

18、P2P形式的优点,在设计思想和处理能力上都得到了进一步优化。混合式P2P在分布式模式的基础上,将用户节点按能力进行分类,使某些节点担任特殊的任务。Skype即时通信软件就使用了混合式P2P网络模式。混合型的P2P模型需要一台中心服务器,中心服务器并不存放任何共享的数据文件,它仅仅起一个协调各个客户端,目录服务,索引文件甚至用户帐户管理等功能.而用户传输和发送的任何数据信息,都不会经过服务器.所以传输共享文件数据的耗时,跟服务器的配置,忙闲,乃至服务器是否生存都没有必然的联系(杨天路,2007)。从工作负荷的方面来看,跟传统的EMAII,FTP,HTTP服务器不同,混合型P2P网络的中央服务器不

19、需要处理任何用户数据文件。图5 混合式P2P网络Fig. 5 Hybrid P2P Network2.4 阻塞和非阻塞阻塞socket,又被称为锁定状态的socket。非阻塞socket,又被称为非锁定状态的socket。当调用一个Winsock API时, API的调用会耗费一定的CPU时间。当一个操作完成之后才返回到用户态,称其为阻塞,反之,则为非阻塞。(胡鸣,2008)当调用API产生一个基于流协议(TCP)的socket时,系统开辟了接收和发送两个缓冲区,所以操作实际都是用户缓冲区和系统缓冲区的数据交互,并不是实际操作的完成,阻塞也是如此。3 P2P网络通信平台的设计3.1 总体设计目

20、标设计完成服务器端和客户端,服务器能够处理客户端的各种请求,并且可以保存日志和查看在线列表;客户端能够登录或者注册到服务器,登录或者注册成功后可以进行即时通信,在通信过程中能够传输文件,并且可以保存通信内容,客户端也可以选择点对点单独通信模式或者多人同时通信模式。3.2 系统功能模块设计3.2.1服务器功能模块设计服务器包括以下几个模块,数据管理模块,消息通讯模块和消息处理机模块,实时控制系统模块,消息队列。数据管理模块(DataStorage)的功能有两个,一是储存用户的ID和IP,用户的状态(在线或者离线状态)并且更新用户信息;二是存放某个资源文件的索引,包括机器路径等等。消息通讯模块(M

21、essagingLayer)的功能是负责和客户端通讯,接收和发送消息。具体功能有两个,一是把从网络接收到的消息存放在待处理消息队列里面. 二是从待发送消息队列里面取出消息,通过网络API发送出去。消息处理机模块(MessageHandler)功能有两个,即从待处理消息队列里面取出消息,并对消息进行分析然后做相应的工作,包括查询数据库,产生一条相应的回复消息,并且把回复的消息存放在待发送消息队列里面。消息队列(MessageQueue)由于网络情况千变万化,客户通讯请求等情况都是不可顶计的,很可能同时收到若干条不同的消息、不同的查询。而服务器可能不能立刻给出回应,如果我们不想漏掉任何一个收到的消

22、息,就必须要有一个队列来存放已经收到的消息了,这里的队列,选择用优先队列,这样,就可以首先处理优先级别高的消息。实时控制系统(ServerRunTimeSystem)是整个服务器端的控制中心,它控制着数据管理模块和通讯模块以及消息处理机模块。3.2.2客户端功能模块设计由于客户端要完成的功能比较多,操作比较复杂,收发的消息比较多,所以客户端使用有限状态机的思想来设计。客户端设计的一个难点是,客户端可能同时处理好几个不同类型的消息。譬如,当客户端A更新了本地共享的磁盘文件信息之后,发送了一个更新文件信息消息给服务器,服务器的更新文件应答消息还没有返回,这时候,另外一个客户端B发来了一个请求连接要

23、求传送客户端A的某共享文件;这时候,客户端A的用户又向服务端请求搜索某文件,同时又向客户端C发出请求,要求传送某文件。这里采用这样的一种设计:定义一个客户端核心类(ClientCore)它能收发和处理全部的客户端到客户端,客户端到服务端的消息。这样,客户端每要进行一个事务,就新生成一个客户端核心的实体(Instance)。并且通过使用每个消息都有的属性传送号码(TransactionlD)来识别同时运行的多个客户端内核。例如,某个消息的始发消息的编号是0x0012,那么,它的应答消息的编号也是0x0012,当消息处理器(MessageHandler)收到了一个消息之后,就通过该消息的编号来区分

24、究竟应该把这个消息交给哪一个核心的实体。客户端包括以下几个模块,消息通讯模块和消息处理机模块,实时控制系统模块,消息队列,客户端核心模块。消息通讯模块(MessagingLayer)的功能是负责和客户机通讯,接收和发送消息.功能有两个,一是把从网络接收到的消息存放在待处理消息队列里面;二是从待发送消息队列里面取出消息,通过网络API发送出去。客户端核心(ClientCore)则需要完成客户端到服务端的工作和本客户端到其它客户端的所有工作。3.3 结构化P2P网络(DHT网络)文件路由算法结构化P2P网络指的是像Chord、Pastry、CAN、Tapestry之类的点对点网络。在这类网络中,每

25、个节点都有固定的地址,整个网络具有相对稳定而规则的拓扑结构。依赖拓扑结构可以给网络的每个节点指定一个逻辑地址,并把地址和节点的位置对应起来。对于给定的某个地址,拓扑结构保证只需要通过O(long(n)跳就能路由到具有相应地址的节点上去(n是网络中的节点数)。在实际的系统中,P2P网络的逻辑地址通常是由Hash函数得到的,每个节点都将保存一张DHT(Distributed Hash Table)进行路由,所以结构化P2P网络通常也叫做DHT网络。3.3.1 DHT路由原理在结构化P2P网路中,网络中的客户端主机为节点,数据项目为对象。名字空间指系统的一个名字域,在这个名字域中素有的名字是独一无二

26、的。名字用来标识节点,一个节点可以有几个名字,每个名字基于不同的尺度。但总的来说,每个节点在一个名字空间中只能有一个名字。对于一个节点来说典型的名字就是它的互联网的IP地址。标示符是指在某个整数名字空间中独一无二的证书。(谭献海,2006)在P2P系统中,标示符可以通过对一个节点的名字进行散列来获得,例如标示符 P=hash(IP)。关键字Key是一个对象独一无二的标示符,它可以通过对对象名进行散列来获得,K=hash(V)。散列函数可以将Key映射到整数,通常可以再一个更小的值的集合上获得一个离散分布。散列函数是不可逆的。散列表(Hash Table)是一个字典,在这个字典中Key通过一个散

27、列函数被映射到一个数组位置上。如果有多个Key被映射到同一位置上叫做冲突。完美的散列函数表是没有冲突的。在基于DHT的P2P系统中,文件被关联到Key(有文件名的散列产生);系统中的每个节点拥有一部分散列空间,它负责保存某个范围的Key。对于一个Key进行查询后,系统将返回一个保存具有Key的对象的节点的标示符(如IP地址)。DHT的功能允许节点基于文件的Key来存入和取出文件,这是在分布式系统中的个的底层基础。目前典型的DHT网络包括Chord、Pastry、CAN、Tapestry等,他们的主要区别在于采用了不同的DHT路由算法。3.3.2 Chord路由算法Chord协议中规定使用的散列

28、算法是SHA-1,并在此基础上提供了优化的路由算法。在Chord中,每个节点都需要存储m个其他节点的信息,这些信息的结合被称为查询表。在Chord中,表格中的节点间的间距以2K的关系排列(K表示表中的数组下标)。这样形成的节点之间路由关系实际上就是折半查找算法需要的排列关系(王艳萍,2006)。3.3.3 Pastry路由算法在Pastry协议中没有规定具体应该采用的散列算法,但是定义了散列所得的键值是一个以为空间。在Pastry协议中,每个节点拥有个128bit的表示(Node ID)。为了保证Node ID的唯一性,一般由节点的网络表示(如IP地址)经过散列得到(王艳萍,2006)。Pas

29、try中的每个节点拥有一个路由表(Routing Table),一个邻居节点集合和一个叶子节点集合,他们一起构成了节点的状态表。Pastry网络中主要有以下几个只能重要的参数:(1)b:用2b进制来处理128bitID,一般娶1,2,3,4;(2)L:叶子节点集合的容量,一般取2b或者2b+1;(3)M:邻居节点集的容量,一般取或者2b+1;(4)N:代表网络中存活的节点数。3.3.4 CAN路由算法在散列算法上,CAN与Chord、Pastry有所不同。在Chord和Pastry中,采用的是一致性散列算法,散列后得到的键值总是一维的。而在CAN中,散列后的结果是一个d维的笛卡尔空间。D是一个

30、有系统规模决定的常量。在CAN中,整个P2P网络被映射到一个d维的笛卡尔空间,每个节点的位置由其自身ID(经由散列后得到的d唯向量)决定。CAN中的节点只存储相邻节点表。由于d维的空间中最多有2d个相邻的节点,因此CAN中节点的相邻节点表最多只存储2d个表项,与整个P2P网络的节点数无关。在查询过程中,查询节点首先计算被查询内容的键值,然后在相邻节点表中查找与该键值最为接近的相邻节点,找到后向该节点发送查询请求(即贪婪策略)。收到查询请求的节点如果发现被查询的信息存储在本地,则直接回应查询节点;如果发现被查询的信息不在本地,则根据相邻节点表转发请求。这一过程一直持续到找到对应的节点为止。4 P

31、2P网络通信平台的实现4.1即时通信系统的实现4.1.1客户端与服务器建立连接客户端到服务器的工作包括:发送注册新用户消息去服务器,并且收取应答消息或者返回的错误消息;发送客户上线消息连同IP地址去服务器,并且收取应答消息或者返回的错误消息;发送客户端共享文件更新消息去服务器,并且收取应答消息或者返回的错误消息;发送搜索文件请求去服务端,并且收取文件搜索的结果或者返回的错误消息。 服务器开启后,会创建一个套接字,并且把该套接字与本机的IP地址和端口绑定(IP和端口在编码中初始化,可以在开启服务器的菜单中修改),一直监听这个端口,然后,客户端开启,用户选择注册或者登录,输入昵称和密码成功后,单击

32、确定,客户端就会自动请求与服务器连接,最后,如果服务器验证无误后,连接成功。4.1.2客户端之间建立连接请求方选择一个通信对象,然后,发送选择的用户名给服务器,如果服务器查看到被选择方的状态为在线,服务器就会把被选择方的IP地址、端口号发给请求方,把请求方的用户名和端口发送给被选择方。此后,被选择方就会创建一个socket号,把该socket号与本机的IP地址和端口绑定,监听这个端口,请求方就会向被选择方发出连接请求,如果被选择方同意,最后两个客户端建立连接成功。以传输文件为例,其流程为:客户端A如果要搜索文件File,首先向服务器查询这个文件是否存在于某台客户机上面,如果搜索成功,则得到目标

33、客户机B的IP。客户端A向客户机B发出请求传送文件的消息。客户机B收到之后,如果愿意传送,并且检测到确实有这个文件,就返回成功的应答消息给A,并且付上FILE的大小。客户端A收到共享请求成功的应答消息,则进入下一个阶段。客户端A得到目标文件的大小之后,就按顺序向客户端B发出传送某Position开始的一定大小的文件数据块,然后等待回应,收到该数据块。然后继续向B发出请求,得到下一个数据块.如此循环直到整个文件传送完成。4.1.3利用P2P网络穿越实现通信网络穿越是P2P网络中客户端与客户端建立通信常用的方法。要想解决好P2P网络穿越,首先要必须了解NAT。NAT的全称是Network Addr

34、ess Translation,即网络地址转换。NAT技术通过将局域网上的主机地址映射为Internet上的有效IP地址,从而实现了网络地址复用(杨天路,2007)。NAT技术暂时解决了IPv4地址不足的问题,但是也隐藏了内部网络地址信息,使外界无法直接访问内部网络设备,而这一点却与P2P技术中的“每个客户机可自主互相交互”相背驰,所以,如何实现NAT穿越,建立客户机之间的直连就尤为重要。P2P网络穿越常用的方法有UDP穿越NAT和TCP穿越NAT,在此设计中采用UDP穿越NAT,也就是我们常说的UDP进行NAT“打洞”。图 6 UDP“打洞”Fig. 6 UDP Hole PunchingP

35、C-1和PC-2进行UDP直连过程如下:(1)PC-1登陆服务器-S,NAT-A为此分配了一个端口55000,那么服务器-S收到的PC-1的地址是186.53.69.88:55000,此即为PC-1的外部网地址。(2)同上过程,PC-2的外部网地址可设为20.135.99.168:44000. 此时,PC-1和PC-2都可以与服务器-S进行通信。而PC-1与PC-2还不能进行通信,因为两台PC所对应的NAT会将对方发来的信息丢弃,二者还没有会话记录。(3)在NAT-B上打一个方向为186.53.69.88(即PC-1的外部网地址)的洞,那么PC-1发送到2.0.135.99.168:44000

36、的信息,PC-2就能收到了。(4)服务器-S负责向PC-2发送打洞指令。(5)PC-2向PC-1的公网地址发送一个UDP报文,虽然此数据包会被NAT-A丢弃,但是NAT-B建立和会话记录,不会再丢弃PC-1的数据包。(6)服务器-S通知PC-1“洞”已经打好,PC-1可以发连接包给PC-2。(7)PC-1向PC-2发送UDP包。(8)至此双方可以进行UDP直连,打洞成功。4.2 利用socket编程创建端口4.2.1 端口的定义端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。应用程序(即进程)通过系统调用与某端口建立连接(binding)后,传输层传给该端口的数据都被相应进程所接收

37、,相应进程发给传输层的数据都通过该端口输出(ANTHONY JONES,2002)。在TCP/IP协议的实现中,端口操作类似于一般的I/O操作,进程获取一个端口,相当于获取本地唯一的I/O文件,可以用一般的读写原语访问。类似于文件描述符,每个端口都拥有一个叫端口号(port number)的整数型标识符,用于区别不同端口。由于TCP/IP传输层的两个协议TCP和UDP是完全独立的两个软件模块,因此各自的端口号也相互独立,如TCP有一个255号端口,UDP也可以有一个255号端口,二者并不冲突。端口号的分配是一个重要问题。有两种基本分配方式:第一种叫全局分配,这是一种集中控制方式,由一个公认的中

38、央机构根据用户需要进行统一分配,并将结果公布于众。第二种是本地分配,又称动态连接,即进程需要访问传输层服务时,向本地操作系统提出申请,操作系统返回一个本地唯一的端口号,进程再通过合适的系统调用将自己与该端口号联系起来(绑扎)。TCP/IP端口号的分配中综合了上述两种方式。4.2.2 socket类型结构类型一:struct sockaddr,该类型是用来保存socket信息的: struct sockaddr unsigned short sa_family; /* 地址族, AF_xxx */ char sa_data14; /* 14 字节的协议地址 */ ; sa_family一般为AF

39、_INET;sa_data则包含该socket的IP地址和端口号。 结构类型二: struct sockaddr_in short int sin_family; /* 地址族 */ unsigned short int sin_port; /* 端口号 */ struct in_addr sin_addr; /* IP地址 */ unsigned char sin_zero8; /* 填充0 以保持与struct sockaddr同样大小 */ ; 这个结构使用更为方便。sin_zero(它用来将sockaddr_in结构填充到与struct sockaddr同样的长度)应该用bzero()

40、或memset()函数将其置为零(Michael A. Miller,2005)。指向sockaddr_in 的指针和指向sockaddr的指针可以相互转换,这意味着如果一个函数所需参数类型是sockaddr时,你可以在函数调用的时候将一个指向 sockaddr_in的指针转换为指向sockaddr的指针;或者相反。sin_family通常被赋AF_INET;sin_port和 sin_addr应该转换成为网络字节优先顺序;而sin_addr则不需要转换。4.2.3 Socket实现代码(服务器端)SOCKET CreateSocket(HWND hwnd) /*创建socket */SOCK

41、ET sockHost;sockHost = socket(AF_INET,SOCK_STREAM,0);if (INVALID_SOCKET = sockHost)MessageBox(hwnd,(LPCTSTR)Createsocketerror.,(LPCTSTR)ERROR,MB_OK);return NG;WSAAsyncSelect(sockHost,hwnd,WM_SOCK,FD_ACCEPT | FD_CLOSE); return sockHost;void BindSock(HWND hwnd, SOCKET sockHost) /*绑定端口号*/int nFlag;SOCK

42、ADDR_IN sockSrv;sockSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);sockSrv.sin_family = AF_INET;sockSrv.sin_port = htons(u_short)atoi(server.pchServerPort);nFlag = bind(sockHost, (LPSOCKADDR)&sockSrv, sizeof(sockSrv);if (nFlag = SOCKET_ERROR)MessageBox(hwnd, (LPCTSTR)Bind error., (LPCTSTR)ERROR, MB_OK

43、);CloseServer(sockHost);/*socket监听*/void ListenSock(HWND hwnd, SOCKET sockHost)int nFlag;nFlag = listen(sockHost, LISTENMAX);if (nFlag = SOCKET_ERROR)MessageBox(hwnd, (LPCTSTR)Listen error., (LPCTSTR)ERROR, MB_OK);CloseServer(sockHost);void AcceptSock(HWND hwnd, SOCKET sockHost)int nLen;int nFlag;in

44、t nError;char chError10;nLen = sizeof(addrclient);nFlag = 0;nError = 0;memset(chError, 0, 10);sockListen= accept(sockHost,(LPSOCKADDR)&addrclient,&nLen);if (sockListen = INVALID_SOCKET) nError = GetLastError();_itoa(nError, chError, 10);MessageBox(hwnd, (LPCTSTR)strcat(chError, Accept error.), (LPCT

45、STR)ERROR, MB_OK);return;else WSAAsyncSelect(sockListen,hwnd,WM_SOCK,FD_READ | FD_WRITE | FD_CLOSE | FD_ACCEPT );5 软件功能测试及验证(1)服务器端主要界面服务器开启界面可以显示服务器的IP地址和端口号,默认情况下,该IP地址为本机IP地址,软件可自动获取,界面如下图所示:图7 服务器登陆界面Fig.7 Server Logging查看在线用户列表界面可实时显示在线用户的用户名,有利于服务器的管理和维护,其界面如下图所示:图8 在线用户列表Fig. 8 On-Line User L

46、ist(2)客户端主要界面在启动客户端程序后,可以选择“新用户注册”功能,进入如下图所以的界面,通过输入用户的用户名(昵称)和密码完成注册图9 用户注册界面Fig. 9 Client registering登陆界面中可以更改所需登陆的服务器的IP地址和端口号,再输入用户自己的用户名和密码,经服务器确认后即可完成正常登陆,界面如下图所示图10 用户登陆界面Fig. 10 Client Logging选择通信用户界面,通过点击列表中显示的用户名,并勾选“练级该用户”,再确定以后即可向所选用户发出通信请求,其界面如下:图11 选择通信对象界面Fig. 11 Choose The Communicated Object 在通信申请方发出通信请求后,接受到邀请的用户将会弹出如下提示界面,用户可自主决定是否接,如下图: 图12 接收

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公文档 > 其他范文


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号