《网络编程聊天程序课程设计.docx》由会员分享,可在线阅读,更多相关《网络编程聊天程序课程设计.docx(14页珍藏版)》请在优知文库上搜索。
1、广西科技大学(筹)GuangxiUniversityofScienceandTechno1.ogy课题名称:TCP/IP协议及网络编程技术课程设计子课题:实现简化功能的客户机和效劳器聊天程序院(系):计算机学院专业:通信工程班级:学生姓名:hshengxue学号:200900402022指导教师:周坚和2012年6月22日目录摘要引言3一、课程设计的目的和意义3二、课程设计的内容和要求3三、课程设计所需了解的相关内容和技术4(一)、套接口4(1)套接口的概念.4(2)套接口的分类5(3) Socket工作模式6(二)、所用的关键技术6(三)WinsockAPI的使用7四、课程设计过程7(一)设
2、计思路7(1)效劳器的主要工作流程7(2)客户机的工作流程8.(3)效劳器的工作流程8五、编程实现9(一)效劳器端的实现9(二)客户端的实现11六、小结15七、参考文献16摘要:网络应用程序是通过网络使用通信协议实现进程间的通信;本工程采用软件工程的方法,综合运用网络程序设计,以ViSUa1.C+6.0作为系统前台应用程序开发工具.此局域网聊天工具采用客户端/效劳端(C/S)模式和UDP连接。它由两个程序组成:效劳器(Server)和客户端(C1.iern),首先需要登录效劳器,再登录客户端,需要指定效劳器IP地址以便与效劳器建立连接。登录后,客户可以在自己的界面上与另一指的定的客户端进行聊天
3、。效劳器模块主要用来维护网络用户用户的信息、,包括用户IP地址,聊天内容;聊天客户端模块主要包括用户连接,发送信息,接收信息。是一套用于Internet网络使用的网络聊天工具,其操作简单,英活性好,运用也比拟稳定。关键词:网络,朝天程序,客户端/效劳端,UDP传输控制协议.0、引言网络应用程序是通过网络使用通信协议实现进程间的通信,UDP是TCP/IP协议族为传输层设计的两个协议之一,UDP提供的是无连接、不可靠的网络传输协议,在进行网络应用程序设计时,TCP/IP协议的核心内容被封装在操作系统中。网络应用程序要使用UDP协议来实现自己的功能,只能通过由系统提供应用户的UDP协议编程接口来实现
4、。因此,可以说设计网络应用程序就是利用网络编程接IJ(API)进行程序设计的过程。在Windows环境下的网络应用程序编程接口叫WindoWSSockets,即套接口。一、课程设计的目的和意义UDP是TCP/IP协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的过失校验功能,是一种无连接的,不可靠的协议。UDP在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比拟高的局域网。由于UDP采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效率高。UDP适合一些实时的应用,如IP,视频会议,它们要求源主机以恒定的速率发
5、送数据,并且在网络出现拥塞时,可以丧失一些数据,但是延迟不能太大。基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。因为1.DP具有TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种平安保障功能,但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。反观UDP由于排除了信息可靠传递机制,将平安和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。二、课程设计的内容和要求用SoCkeI编程接口编写两个程序,分别为客户机程序(CIien1.cppH1.效劳器程序(SerVer.cpp),使用UDP传输层协议,能实现下述功能。程序能流畅地完成
6、信息内容的传输和接收。(2)要能对多个客服端进行管理。需要通过IDP模拟多个客服端连接验证的情况。三、课程设计所需了解的相关内容和技术(一)、套接口(1)套接口的概念WindOWSSOCketSAP1.依套接口Socket进行通信。套接口可看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网路应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡(N1.C)的传输介质将这段信息发送到另一台主机的Socket中,使这段信息能传送到其它程序中,如图1所示。1南用结口卡(H1.C)当主机A上的网络应用程序A要发送数据时,通过调用数据发送函数
7、首先将要发送的一段信息写入SoCket中,Socket中的内容通过主机A的网络管理软件由主机A的网络接口卡发送到主机B,主机B的网络接口卡接收到这段信息后,再传给主机B的网络管理软件,网络管理软件将这段信息保存在主机B的Socket中,然后程序B才能在Socket中读取并使用这段信息。由此看来,SOCket的本质是通信过程中所要使用的一些缓冲区及一些相关的数据结构。(2)套接口的分类为了满足不同的通信程序对通信质量和性能的要求,一般的网络系统提供了三种不同类型的套接口,以供用户在设计网络应用程序时根据不同的要求来选择。这三种套接口分别是:(1)流式套接口(SOa1.STREAM),它提供了一-
8、种可靠的、面向连接的双向数据传输效劳,实现数据无过失、无重复地发送。流失套接口内设流量控制,被传输的数据看作是无记录边界的字节流。在TCP/IP协议族中,使用TCP协议来实现学节流的传输,当用户想要发送大批量的数据或者对数据的传输有较高的要求时,使用流式套接口。(2)数据报套接口(SOCKDGRAM),它提供了一种无连接、不可靠的双向数据传输效劳。免费论文。数据包以独立的包形式被发送,并保存了记录边界,不提供可匏性保证。数据在传输过程中可能会丧失或重复,并且不能保证在接收端数据按发送顺序接收。免费论文。在TCP/IP协议族中,使用UDP协议来实现数据报套接口。在同一台计算机上或负载较轻的1.A
9、N上,因为出现过失的可能性较小,所以可以使用数据报套接口进行数据传输,这样通信的质量可以得到保证,并且通信的效率较高。原始套接口(SOCK_RAW),该套接口允许对较低层协议(如IP或ICvP)进行直接访问,常用于检验新的网络协议实现,也可用于测试新配置或安装的网络设备。(3)SoCket工作模式Socket以客户/效劳器模式工作。5。Cket效劳器程序通常事先已经启动,并在一个众所周知的端口监听对效劳的请求。Socket客户应用程序需要某种效劳时,便向提供效劳的SOCket效劳器发出请求,效劳器接收到请求后,就响应客户提出的请求。(二)、所用的关键技术(1) UDP协议UDP是一个无连接协议
10、,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来F1.应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计停机的能力和传输带宽的限制;在接收端,UDP把每个消息段放在队列中,应用程序每次从队列中读一个消息段。(2) TCP/IP协议在TCP/IP协议族中,有两个互不相同的传输协议:TCP1.传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成适宜的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可匏性的端到端
11、的通信,因此应用层可以忽略所有这些细节。而另一方面,UDP那么为应用层提供一种非常简单的效劳。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。TCP/IP协议与Winsock网络编程接口IyinSoCk标准不是一种网络协议,而是一套开放的、支持多种协议的Windows写的网络编程接口。WinSoCk可以访问很多种网络协议,可以把它当作一种协议的封装。现在的Wins。Ck已经根本上实现了与协议无关,可以使用WinSOCk来调用协议的功能(3) WinsockAPI的使用下面使用Winsock进行编程时涉及的主要函数:WSAS
12、tartup函数、WSAC1.eanup函数、socket函数、c1.osesocket函数、Send(Sendto)函数、recv(recvfrom)函数、bind函数、IiSten函数、accept函数、ConnCC1.函数四、课程设计过程(一)设计思路设计UDP效劳器的过程如下所示。首先,创立乂一个SoCkC1.并监听。然后启动线程接收数据。用一个链表保存所有连上的客户,并通知连接成功。这样,客户就有时机处理这一事件并作一些动作。最后,当客户断开时,向效劳器发送一个事件,效劳器就可以做一些收尾工作。其中最关键的局部是收发局部和数据处理局部。(1)效劳器的主要工作流程如图1所示I效劳瑞E2
13、效劳工作流程(2)客户机的工作流程如下I翻开通信信道(申请一个套接字),并连接到效劳器在主机的保存端口,该端口对应效劳器的UDP进程。向效劳器发出请求报文,等待接收应答。从效劳器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。(3)效劳器的工作流程如下:翻开通信信道(申请一个套接字),通知本地主机在某一保存端口接收客户机请求。等待客户机请求到达指定端口。接收到请求,启动一个新进程处理用户请求,同时释放旧进程以响应新的客户请求,一旦效劳完成,关闭新进程与客户的通信链路。继续等待客户机请求。如果不想响应客户机请求,关闭效劳器进程。五、编程实现本实例使用了Visua1.C+6.O下的控制
14、台程序,该程序中的通信协议使用的是面向连接的TCP协议(Soa1.STREAM)3。效劳器端的IP地址使用系统指定的IP地址,端口号在程序中指定为6000。(一)UDP效劳器端的实现建立一个空的基于控制台的应用程序server,本设计实现了基于UDP协议的客户端和效劳器端的一个简单聊天程序设计。效劳器主要源代码如下:首先PrOjeCtfSettingf1.inkfProjeCtOptions中Subsystemiwindow改为Subsystenirconso1.e/server,cpp:Definestheentrypointfortheconso1.eapp1.ication./inc1.
15、ude*stdafx.h*inc1.udeinc1.udeinc1.udeinc1.udepragmacomment(1.ib,ws2_32.1.ib)#defineport6000voidmain()WS,DTwsadata:WSAStartup(MKEW0RD(2,2),&wsadata);初始化WindoWSSocketsD1.1.SOCKETsock:sock=socket(AF_INET,SOCKJ)GRAV,0);创立SOCk,SOCKE_DGRAM表示套接口类型1.DPstructsockaddrinIOCa1;本地主机地址变量structsockaddr_infrom;远程主机地址变量intfromIen=sizeof(from);1.oca1.sin.famiIy=AF_INET;/该处告诉Winsock所使用的是IP地址族1.oca1.,sin_port=htons(port);监听端口1.oca1.sin_addr.s_addr=INADDR_AMY;/本机bind(sock,(structsockaddr*)&1.oca1.,Si