课程设计报告
设计名称:网络协议编程应用课程设计
系(院):机算计科学学院
专业班级:网络11003班
姓名:王小贱
学号:201006421
指导教师:张为邱机
设计时间:2013.6.7 - 2013.6.18
设计地点:四号楼1楼2号机房
一、目的与任务
网络协议编程应用课程设计是《TCP/IP协议分析》课程后的一个重要的教学环节,是对学生进行的一次较为全面的网络协议编程方面的训练。其基本目的是:
(1)培养学生理论联系实际的设计思想,训练综合运用所学的基础理论知识,结合生产实际分析和解决网络应用中问题的能力,从而使基础理论知识得到巩固和加深。
(2)通过编程实践学习掌握网络协议的运行原理。
(3)练习多线程的网络编程模式,为以后开发真实的应用协议打下基础。
二、基本要求
(1)合理设计系统框图和程序结构图。
(2)根据系统框图设计,编写程序代码。
(3)编写程序说明书。
三、实验环境
安装有vs2010以及虚拟机的计算机
四、课程设计内容
(1)、熟悉开发工具
Visual Studio是微软公司推出的开发环境。是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日上市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual Studio 2010同时带来了NET Framework 4.0、Microsoft Visual Studio 2010 CTP( Community Technology
Preview--CTP),并且支持开发面向Windows 7的应用程序。除了
Microsoft SQL Server,它还支持IBM DB2和Oracle数据库。学习使用好vs2010对于我们来说有很大意义。
(2)、套接字编程练习
使用TCP/IP协议的应用程序通常采用两种应用编程接口(API):socket和TLI(运输层接)。前者有时称作"Berkeley socket",表明它是从伯克利版发展而来的。后者起初是由AT & T开发的,有时称作XTI (X/Open运输层接口),以承认X/Open这个自己定义标准的国际计算机生产商所做的工作。XTI实际上是TLI的一个超集。而在windows操作系统中,实现了windows版本的socketAPI,又称winsock。
TCP/IP还是OSI的ISO协议都是分层模式的,用层的概念屏蔽的下层的细节,只要完成自层的功能即可,因而程序员在做网络编程时并不需要去关心网络底层的具体实现,只需要关心软件的功能即可极大的简化了程序的编写。因而我们在学习网络socket编程时并不一定要很多的网络方面的知识,甚至是TCP/IP协议的知识也不需要太多。因而在着我就不介绍那方面的知识了,如果要了解网上也四处都有那些被别人应用了N遍的经典的介绍。在这只介绍基于TCP和UDP的简单的编
程实现。
现今的网络程序一般都是基于C/S模型,即客户机-服务器模型。这种结构将主要运算操作放在中心计算机上。同集中式大型计算系统比较,"客户-服务器"结构的主要优点是提供了良好的实用性、灵活性、交互性和可扩展性。"客户-服务器"以数据库服务器取代集中式文件共享进而实现了计算机系统之间的松耦合。
Windows Sockets是Microsoft Windows的网络程序设计接口,它是从Berkeley Sockets扩展而来的,以动态链接库的形式提供给我们使用。Windows Sockets在继承了Berkeley Sockets主要特征的基础上,又对它进行了重要扩充。这些扩充主要是提供了一些异步函数,并增加了符合Windows消息驱动特性的网络事件异步选择机制。Windows Sockets 1.1和Berkeley Sockets都是基于TCP/IP协议的;Windows Sockets 2从Windows Sockets 1.1发展而来,与协议无关并向下兼容,可以使用任何底层传输协议提供的通信能力,来为上层应用程序完成网络数据通讯,而不关心底层网络链路的通讯情况,真正实现了底层网络通讯对应用程序的透明。
套接字的类型总共有三类:
1) 流式套接字(SOCK_STREAM)
提供面向连接、可靠的数据传输服务,数据无差错、无重复的发送,且按发送顺序接收。这种类型是基于TCP协议的。
2) 数据报式套接字(SOCK_DGRAM)
提供无连接服务。数据包以独立包形式发送,不提供无错保证,数据可
能丢失或重复,并且接收顺序混乱。这种类型是基于UDP协议的
3) 原始套接字(SOCK_RAW)。
用于编写基于IP协议的程序。它可以访问ICMP和ICMP等协议包,可以编写内核不处理的IP数据包,还可以创建自定义的IP数据包首部。(3)、TCP套接字编程
当使用TCP/IP协议一发客户服务器服务程序时,服务器需要等待任意数量客户端的连接,以便以他们提供服务。客户端连接服务器时,必须先知道服务器的名称。在TCP/IP中,就是服务器的IP地址和端口号。bind()函数实现将服务器绑定到一个已知的名字上的功能。接下来要将服务器套接字设置为监听状态,这是通过listen()函数完成的。在监听状态下,如果客户端向服务器发起连接请求,服务器通过调用accept()函数来接受该连接请求。服务器与客户端完成连接后,就可以进行数据通信了。
对客户端来说,首先调用connect()函数向服务器发出连接请求。如果服务器接受了该请求,接下来就可以与服务器通信了。
开发套接字应用程序时,首先应进行Windows Sockets的初始化,加载Windows Sockets的实现,然后创建套接字,对TCP套接字来说,需要在socket()函数或都WSASocket()函数中指明SOCK_STREAM套接字类型。当服务器和客户端通信结束时,关闭套接字,释放Windows Sockets的实现。
流程如下:
服务器:创建套接字—>绑定—>监听—>接受连接—>收发数据—>