《2022年网络编程实现网络对时课程设计 .pdf》由会员分享,可在线阅读,更多相关《2022年网络编程实现网络对时课程设计 .pdf(17页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、- 0 - 课题名称 : TCP/IP 协议及网络编程技术课程设计子课题:实现网络对时程序院 (系):计算机学院专业:通信工程班级:学生姓名:hshengxue 学号:指导教师:周坚和2012 年6 月22 日目录名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 17 页 - - - - - - - - - - 1 - 摘要3 引言3 一、课程设计的目的和意义3 二、课程设计的内容和要求3 三、课程设计所需了解的相关内容和技术4 (一) 、 套接口4 (1) 套接口的概念.
2、4 (2) 套接口的分类5 (3) Socket 工作模式6 (二) 、所用的关键技术6 (三) Winsock API 的使用7 四、课程设计过程7 (一)设计思路7 (1)服务器的主要工作流程7 (2)客户机的工作流程8. (3)服务器的工作流程8 五、 编程实现9 (一) 服务器端的实现9 (二) 客户端的实现11 六、 小结15 七、参考文献16 摘要 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 17 页 - - - - - - - - - - 2 - 网
3、络应用程序是通过网络使用通信协议实现进程间的通信;本项目采用软件工程的方法,综合运用网络程序设计,以visual c+6.0作为系统前台应用程序开发工具。此局域网聊天工具采用客户端服务端 ( ) 模式和UDP连接。它由两个程序组成:服务器(Server )和客户端 (Client), 首先需要登录服务器, 再登录客户端,需要指定服务器地址以便与服务器建立连接。登录后,客户可以在自己的界面上与另一指的定的客户端进行聊天。服务器模块主要用来维护网络用户用户的信息,包括用户地址,聊天内容;聊天客户端模块主要包括用户连接,发送信息,接收信息。是一套用于Internet网络使用的网络聊天工具,其操作简单
4、,灵活性好,运用也比较稳定。关键词:网络,聊天程序,客户端服务端,UDP 传输控制协议。0、引言网络应用程序是通过网络使用通信协议实现进程间的通信,UDP是 TCP/IP 协议族为传输层设计的两个协议之一,UDP提供的是无连接、不可靠的网络传输协议,在进行网络应用程序设计时,TCP/IP协议的核心内容被封装在操作系统中。网络应用程序要使用UDP 协议来实现自己的功能, 只能通过由系统提供给用户的UDP 协议编程接口来实现。因此, 可以说设计网络应用程序就是利用网络编程接口(API)进行程序设计的过程。 在 Windows环境下的网络应用程序编程接口叫Windows Sockets,即套接口。名
5、师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 17 页 - - - - - - - - - - 3 - 一、课程设计的目的和意义UDP 是 TCP/IP 协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中, 提供了有限的差错校验功能, 是一种无连接的,不可靠的协议。 UDP 在一个较低的水平上完成进程之间的通信,在收到分组的时候没有流量控制机制也没有确认机制,适用于可靠性比较高的局域网。由于 UDP 采取了无连接的方式,因此协议简单,在一些特定的应用中协议运行效
6、率高。UDP适合一些实时的应用,如IP 电话,视频会议, 它们要求源主机以恒定的速率发送数据,并且在网络出现拥塞时,可以丢失一些数据, 但是延迟不能太大。 基于这些特点,流式多媒体通信、多播等应用在传输层采用的就是UDP协议。因为UDP 具有 TCP所望尘莫及的速度优势。虽然TCP协议中植入了各种安全保障功能, 但是在实际执行的过程中会占用大量的系统开销,无疑使速度受到严重的影响。 反观 UDP 由于排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间, 使速度得到了保证。二、课程设计的内容和要求用 socket 编 程接口 编 写两 个程 序, 分 别为 客 户
7、 机程序(client.cpp)和服务器程序( server.cpp ) ,使用 UDP传输层协议,能实现下述功能: 客户端能够从服务器端取出标准时间,然后同步本机时钟。三、课程设计所需了解的相关内容和技术名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 17 页 - - - - - - - - - - 4 - (一) 、 套接口(1)套接口的概念 WindowsSockets API 依靠套接口 Socket 进行通信。套接口可看成是两个网络应用程序进行通信时,各自通信连
8、接中的一个端点。通信时,其中的一个网路应用程序将要传输的一段信息写入它所在主机的 Socket 中,该 Socket 通过网络接口卡 (NIC) 的传输介质将这段信息发送到另一台主机的Socket 中,使这段信息能传送到其它程序中,如图 1 所示。 1 当主机 A上的网络应用程序A要发送数据时,通过调用数据发送函数首先将要发送的一段信息写入Socket 中,Socket 中的内容通过主机 A的网络管理软件由主机A的网络接口卡发送到主机B,主机B的网络接口卡接收到这段信息后,再传给主机B的网络管理软件,网络管理软件将这段信息保存在主机B的 Socket 中,然后程序 B才能在 Socket 中读
9、取并使用这段信息。由此看来,Socket 的本质是通信过程中所要使用的一些缓冲区及一些相关的数据结构。(2)套接口的分类为了满足不同的通信程序对通信质量和性能的要求,一般的网名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 17 页 - - - - - - - - - - 5 - 络系统提供了三种不同类型的套接口,以供用户在设计网络应用程序时根据不同的要求来选择。这三种套接口分别是:(1)流式套接口( SOCK_STREAM) ,它提供了一种可靠的、面向连接的双向数据传输服
10、务,实现数据无差错、无重复地发送。流失套接口内设流量控制,被传输的数据看作是无记录边界的字节流。在 TCP/IP协议族中,使用 TCP协议来实现字节流的传输, 当用户想要发送大批量的数据或者对数据的传输有较高的要求时,使用流式套接口。(2)数据报套接口( SOCK_DGRAM) ,它提供了一种无连接、不可靠的双向数据传输服务。免费论文。数据包以独立的包形式被发送,并保留了记录边界, 不提供可靠性保证。 数据在传输过程中可能会丢失或重复,并且不能保证在接收端数据按发送顺序接收。免费论文。在TCP/IP 协议族中,使用UDP协议来实现数据报套接口。在同一台计算机上或负载较轻的LAN上,因为出现差错
11、的可能性较小, 所以可以使用数据报套接口进行数据传输,这样通信的质量可以得到保证,并且通信的效率较高。(3)原始套接口( SOCK_RAW) ,该套接口允许对较低层协议(如IP或 ICMP )进行直接访问,常用于检验新的网络协议实现,也可用于测试新配置或安装的网络设备。(3) Socket 工作模式Socket 以客户 / 服务器模式工作。Socket 服务器程序通常事先已经启动,并在一个众所周知的端口监听对服务的请求。Socket 客户名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
12、 6 页,共 17 页 - - - - - - - - - - 6 - 应用程序需要某种服务时, 便向提供服务的Socket 服务器发出请求,服务器接收到请求后,就响应客户提出的请求。(二) 、所用的关键技术(1)UDP 协议UDP 是一个无连接协议,传输数据之前源端和终端不建立连接,当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP 传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽的限制;在接收端,UDP 把每个消息段放在队列中,应用程序每次从队列中读一个消息段。(2)TCP/IP 协议在 T C P / I P协议族中,有两个互不
13、相同的传输协议: T C P (传输控制协议)和 U D P(用户数据报协议)。T C P 为两台主机提供高可靠性的数据通信。 它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组, 设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面, U D P 则为应用层提供一种非常简单的服务。 它只是把称作数据报的分组从一台主机发送到另一台主机, 但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。TCP/IP 协议与 Winsock 网络编程接口Winsock 规范不是一种网络协议,而是
14、一套开放的、支持多种协议的Windows写的网络编程接口。 Winsock 可以访问很多种网络协议,可名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 17 页 - - - - - - - - - - 7 - 以把它当作一种协议的封装。 现在的 Winsock 已经基本上实现了与协议无关,可以使用Winsock 来调用协议的功能(3)Winsock API 的使用下面使用 Winsock 进行编程时涉及的主要函数:WSAStartup函数、 WSACleanup 函数、 s
15、ocket 函数、closesocket函数、send(sendto) 函数、 recv(recvfrom)函数、 bind 函数、 listen函数、 accept 函数、connect 函数四、课程设计过程(一)设计思路设计 UDP 服务器的过程如下所示。 首先,创建又一个 Socket 并监听。然后启动线程接收数据。用一个链表保存所有连上的客户,并通知连接成功。这样,客户就有机会处理这一事件并作一些动作。最后,当客户断开时, 向服务器发送一个事件, 服务器就可以做一些收尾工作。其中最关键的部分是收发部分和数据处理部分。(1)服务器的主要工作流程如图1 所示:名师资料总结 - - -精品资
16、料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 17 页 - - - - - - - - - - 8 - (2)客户机的工作流程如下:打开通信信道 (申请一个套接字 ) ,并连接到服务器在主机的保留端口,该端口对应服务器的UDP 进程。向服务器发出请求报文,等待接收应答。从服务器方收到最终应答结果,或在不再请求时关闭信道并终止客户机进程。(3)服务器的工作流程如下:打开通信信道 (申请一个套接字 ) , 通知本地主机在某一保留端口接收客户机请求。等待客户机请求到达指定端口。接收到请求,启动一个新进程处
17、理用户请求, 同时释放旧进程以响应新的客户请求,一旦服务完成,关闭新进程与客户的通信链路。继续等待客户机请求。如果Bind() Socket() Recvfrom() 等待客户请求处理服务请求Sendto() Close() Socket() Bind() Sendto() Recvfrom() Close() 服务请求服务应答服务器客户机图 2 服务器工作流程名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 17 页 - - - - - - - - - - 9 - 不想响
18、应客户机请求,关闭服务器进程。五、 编程实现本实例使用了 Visual C+6.0下的控制台程序,该程序中的通信协议使用的是面向连接的TCP协议(SOCK_STREAM)3 。服务器端的IP地址使用系统指定的IP 地址,端口号在程序中指定为6000。(一) UDP 服务器端的实现建立一个空的基于控制台的应用程序 server ,本设计实现了基于UDP协议的客户端和服务器端的一个简单聊天程序设计。服务器主要源代码如下 : 首 先project setting link project Options中subsystem:window 改为 subsystem:console #include #
19、include #include #include #pragma comment( lib, ws2_32.lib ) void main() WSADATA wsadata; WSAStartup(MAKEWORD(2,2), &wsadata);/ 初始化 Windows Sockets 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 17 页 - - - - - - - - - - 10 - DLL SOCKET sock; sock = socket(AF_I
20、NET, SOCK_DGRAM, 0);/创建 sock,SOCKE_DGRAM表示套接口类型 UDP struct sockaddr_in local;/本地主机地址变量struct sockaddr_in from;/远程主机地址变量int fromlen =sizeof(from); local.sin_family=AF_INET;/该处告诉 Winsock所使用的是 IP 地址族local.sin_port=htons(8000); /监听端口local.sin_addr.s_addr=INADDR_ANY; /本机bind(sock,(struct sockaddr*)&local
21、,sizeof(local);/bind()函数把一个 sock 与一个主机地址和端口号联系起来while (1) char buffer11024; char buffer21024; printf(等待来自于其他机器的消息-n); if(recvfrom(sock,buffer1,sizeof(buffer1),0,(struct sockaddr*)&from,&fromlen)!=SOCKET_ERROR)/ 获得客户端的主机地址信息 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - -
22、- 第 11 页,共 17 页 - - - - - - - - - - 11 - printf(接受到来自于 %s-%sn,inet_ntoa(from.sin_addr),buffer1); / 给 cilent发信息printf(请输入你给客户端的消息:n); scanf(%s,buffer2); sendto(sock,buffer2,sizeof (buffer2),0,(struct sockaddr*)&from,fromlen); /调用 sendto() 向客户端发送应答数据 Sleep(500); closesocket(sock);/关闭 sock (二) UDP 客户端的
23、实现建立一个空的基于控制台的应用程序client: 客户端主要源代码如下 : 首 先project setting link project Options中subsystem:window 改为 subsystem:console / 321.cpp : Defines the entry point for the application. / 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 17 页 - - - - - - - - - - 12 - #includ
24、e afx.h #include #include #include #pragma comment(lib,WS2_32.lib) main() WSADATA wsd; SOCKET s; char buf1024; if(WSAStartup(MAKEWORD(2,2),&wsd)!=0) return -1;/失败 s=socket(AF_INET,SOCK_DGRAM,0); if(s=INVALID_SOCKET) WSACleanup(); return -1;/创建套接字失败 SOCKADDR_IN servAddr; 名师资料总结 - - -精品资料欢迎下载 - - - -
25、- - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 17 页 - - - - - - - - - - 13 - servAddr.sin_family=AF_INET; servAddr.sin_addr.s_addr=inet_addr(172.17.136.243); servAddr.sin_port=htons(2000); if(bind(s,(SOCKADDR*)&servAddr,sizeof(SOCKADDR_IN)=SOCKET_ERROR) closesocket(s); WSACleanup(); retur
26、n -1;/绑定套接字失败 int nServAddrlen=sizeof(servAddr); ZeroMemory(buf,sizeof(buf); CString ss=TimeNow; strcpy(buf,ss); SOCKADDR_IN clientAddr; clientAddr.sin_family=AF_INET; clientAddr.sin_addr.s_addr=inet_addr(172.17.136.243); clientAddr.sin_port=htons(short)5000); int nClientlen=sizeof(clientAddr); if(s
27、endto(s,buf,sizeof(buf),0,(SOCKADDR*)&clientAddr,nClientlen)=SOCKET_ERROR) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 17 页 - - - - - - - - - - 14 - closesocket(s); WSACleanup(); return -1;/向服务器发送数据失败 memset(buf,0,1024); if(recvfrom(s,buf,sizeof(buf),0,(SOC
28、KADDR*)&servAddr,&nServAddrlen)=SOCKET_ERROR) closesocket(s); WSACleanup(); return -1;/接收数据失败 SYSTEMTIME systime; memcpy(&systime,buf,16); SetLocalTime(&systime);/设置本地与服务器时间同步。closesocket(s); WSACleanup(); (三) 、运行截图如下 : 运行客服端 : 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - -
29、- - - 第 15 页,共 17 页 - - - - - - - - - - 15 - 图 1 运行服务器端 : 图 2 六、 小结本次课程设计为时二周, 我选的课题是实现简化功能的客户机和服务器聊天程序(运用UDP实现) ,其主要研究内容在于实现文件的传输及接收。 我们首先是了解 UDP 的定义,即确定 UDP 究竟是个什么协议,它有些什么性质和特征,它应用于那些方面。经过了解知道了UDP是 TCP/IP 协议族为传输层设计的两个协议之一,它在进程与进程的通信过程中,提供了有限的差错校验功能,是一种无连接的、不可靠的协议。分析知道了 UDP 其实就是用来实现网络中文件的传输和接收的协议。
30、接下来我就开始思考具体的UDP 实现的程序, 该程序分名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 17 页 - - - - - - - - - - 16 - 为客户端和服务器端两部分,客户端主要是执行文件或消息的发送,服务器端则主要是接收这些内容。 整个程序最重要也是最有难度的部分就是如何把发送和接收两部分联系在一起,经过我反复翻阅资料和与同学交流, 我们终于攻克了这个难题, 这样我们就把程序的功能尽可能的实现出来。 而且这次的课程设计过程中,我们接触到了很多关于
31、Winsock 的编程,使我们学到了新知识。具体的,通过这次的课程设计,我们掌握了: UDP套接字的创建、绑定和关闭;UDP数据报的发送和接收方法等。 通过几个星期的努力, 虽然从中也发现了自己很多不足,可能其中还有不少问题, 但我觉得最重要的是自己也从中得到很多;不敢说百分百的完成也应该基本上完成了课题任务,成功地实现课题目标。七、参考文献1 任泰明.TCP/IP 协议与网络编程 M. 第 1 版. 西安:西安电子科技大学出版社 .2004 2 邹月,陈建兵 .Socket的网络编程研究与实现J.电脑编程技巧与维护 .2008 3 罗军舟,黎波涛,杨明 . TCP/IP 协议及网络编程技术北京:清华大学出版社, 2004 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 17 页,共 17 页 - - - - - - - - -