网络程序课程设计报告模版

合集下载

网络程序设计课程设计报告

网络程序设计课程设计报告

哈尔滨德强商务学院网络程序设计(JSP)设计报告系别计算机与信息工程系专业计算机系科学与技术班级07 计本一班学生刘桐飞学号20075113862009年12月10日(设计)题目学生信息管理系统一、设计研究目的及意义近年来,伴随着我国高等教育的改革以及计算机信息技术的迅速发展,高校学生管理系统正向国家标准化的信息结构迈进。

与此同时,校园网技术的成熟为建立基于Internet 的学生综合信息管理系统提供了强大的技术支持。

功能完善的学生信息管理系统不仅可以支持学校管理决策、教育决策、教学研究,还可提高学生信息管理的现代化程度,增强学生管理的科学性和透明度。

随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。

管理信息系统是一个不断发展的新型学科,任何一个单位要生存要发展,要高效率地把内部活动有机地组织起来,就必须建立与自身特点相适应的管理信息系统。

学生管理系统是一个教育单位不可缺少的部分,它的内容对于学校的决策者和管理者来说都至关重要,所以学生管理系统应该能够为用户提供充足的信息和快捷的查询手段。

但一直以来人们使用传统人工的方式管理文件档案,这种管理方式存在着许多缺点,如:效率低、保密性差,另外时间一长,将产生大量的文件和数据,这对于查找、更新和维护都带来了不少的困难。

随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。

二、设计和研发技术简介JavaBean 是一种JAVA语言写成的可重用组件。

为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。

JavaBeans 通过提供符合一致性设计模式的公共方法将内部域暴露称为属性。

众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这些JavaBean 属性。

用户可以使用JavaBean将功能、处理、值、数据库访问和其他任何可以用java代码创造的对象进行打包,并且其他的开发者可以通过内部的JSP页面、Servlet、其他JavaBean、applet程序或者应用来使用这些对象。

网络工程课程设计报告格式模板

网络工程课程设计报告格式模板

网络工程课程设计报告格式网络工程课程设计报告题目: 郑州航院校园网络规划方案及设计学号:姓名: 尚卫民指导老师: 张森年 12 月 8 日校园网络工程设计方案目录前言 (3)第一章需求分析 (4)第二章网络规划 (7)一拓扑设计与设计原则 (7)二网络结构分析 (9)三网络架构设计与拓扑结构 (10)第三章主要技术设计的具体配置过程 (13)一访问层交换服务的实现——配置访问层交换机 (13)二分布层交换服务的实现-配置分布层交换机 (14)三核心层交换服务的实现——配置核心层交换机 (17)四配置接入路由器InternetRouter (19)五远程访问模块设计 (21)第四章服务器模块设计 (23)一结构化布线设计 (24)二设计原则 (24)三设计目标 (25)第五章总结 (25)前言当今的世界正从工业化社会向信息化社会转变。

一方面, 社会经济已由基于资源的经济逐渐转向基于知识的经济, 人们对信息的需求越来越迫切, 信息在经济的发展中起着越来越重要的作用, 信息的交流成为发展经济最重要的因素。

另一方面, 随着计算机、网络和多媒体等信息技术的飞速发展, 信息的传递越来越快捷, 信息的处理能力越来越强, 信息的表现形式也越来越丰富, 对社会经济和人们的生活产生了深刻的影响。

这一切促使通信网络由传统的电话网络向高速多媒体信息网发展。

快速、高效的传播和利用信息资源是21世纪的基本特征。

掌握丰富的计算机及网络信息知识不但仅是素质教育的要求而且也是学生掌握现代化学习与工作手段的要求。

因此, 学校校园网的有无及水平的高低, 也将成为评价学校及学生选择学校的新的标准之一。

Internet及WWW应用的迅猛发展, 极大的改变着我们的生活方式。

信息经过网络, 以不可逆转之势, 迅速打破了地域和时间的界限, 为更多的人共享。

而快速、高效的传播和利用信息资源正是二十一世纪的基本特征。

学校作为信息化进程中极其重要的基础环节, 如何经过网络充分发挥其教育功能, 已成为当今的热门话题。

湖南科技大学计算机网络课程设计报告参考模板

湖南科技大学计算机网络课程设计报告参考模板

计算机网络课程设计报告姓名:学号:班级:指导老师:湖南科技大学计算机科学与工程学院2016年1 月网络聊天程序的设计与实现一、课程设计题目了解Socket通信的原理,在此基础上编写一个聊天程序。

二、课程设计内容1.TCP/IP协议与WinSock网络编程接口的关系WinSock 并不是一种网络协议,它只是一个网络编程接口,也就是说,它不是协议,但是它可以访问很多种网络协议,你可以把它当作一些协议的封装。

现在的WinSock已经基本上实现了与协议无关。

你可以使用WinSock来调用多种协议的功能。

那么,WinSock 和TCP/IP协议到底是什么关系呢?实际上,WinSock就是TCP/IP协议的一种封装,你可以通过调用WinSock的接口函数来调用TCP/IP的各种功能.例如我想用TCP/IP 协议发送数据,你就可以使用WinSock的接口函数Send()来调用TCP/IP的发送数据功能,至于具体怎么发送数据,WinSock已经帮你封装好了这种功能。

2. WinSock编程简单流程WinSock编程分为服务器端和客户端两部分,TCP服务器端的大体流程如下:对于任何基于WinSock的编程首先必须要初始化WinSock DLL库。

int WSAStarup( WORD wV ersionRequested,LPWSADATA lpWsAData )。

wVersionRequested是我们要求使用的WinSock的版本。

调用这个接口函数可以初始化WinSock 。

然后必须创建一个套接字(Socket)。

SOCKET Socket(int af,int type,int protocol);套接字可以说是WinSock通讯的核心。

WinSock通讯的所有数据传输,都是通过套接字来完成的,套接字包含了两个信息,一个是IP地址,一个是Port端口号,使用这两个信息,就可以确定网络中的任何一个通讯节点。

当调用了Socket()接口函数创建了一个套接字后,必须把套接字与你需要进行通讯的地址建立联系,可以通过绑定函数bind来实现这种联系。

网络课程设计报告模板-D计算机121

网络课程设计报告模板-D计算机121

5

一、课程设计目的
计算机网络课程设计是计算机及相关专业的实践环节之一,是学习完《计算机网 络》课程后进行的一次全面的综合练习。其目的在于加深对 OSI 七层模型、TCP/IP 模型的各层功能和设计思想的理解,掌握组建计算机网络的基本技术,特别是网络规 划、路由器等网络设备的基本功能与选型以及网络应用服务器的基本配置,提高学生 的应用能力和动手实践能力。
二、设计题目及要求
以淮海工学院东港校园为背景,设计一个校园网方案。 淮海工学院的东港学院分为办公区、教学区和生活区三部分。现假设:办公区中 各楼宇名为:行政楼,图书馆;教学区楼宇名为:主楼、新楼、实验楼、大学生活动 中心楼等;生活区中楼宇名为:郁州书院楼、瀛洲书院楼、凌州书院楼、海州书院楼, 女生宿舍楼,教师住宅区、以及各食堂和学生创业街。假设办公区、教学区每个办公 室、教室均预留 2 个信息点,生活区每个房间预留 1 个信息点,东港学院所使用 IP 地址块为 202.168.0.0/18。 试根据东港学院校园网的应用需求和管理需求、 各建筑物的 地理分布,确定各楼宇信息点个数及信息点分布,设计出东港学院的校园网方案。方 案中应明确学院网管中心的位置,确定拓扑方案,进行 IP 地址规划,完成设备选型, 注明各种设备、设施和软件的生产商、名称、型号、配置与价格,并分别给出其价格 的出处(如网站等) ,基本确定方案的预算。要求: 1、根据要求对指定园区建网进行需求分析,提交需求分析报告; 2、在需求分析的基础上进行系统设计、技术选型,规划、设计网络的逻辑拓扑 方案、布线设计等,划分子网,设计子网地址、掩码和网关,为每个子网中的计算机 指定 IP 地址; 3、根据条件进行设备选型,决定各类硬件和软件的配置和经费预算方案;
计算机网络课程设计报告

网络编程课程设计报告

网络编程课程设计报告

网络编程课程设计飞鸽传书专业:软件工程班级:123302班完成日期:2014-12-20指导教师:目录目录第1章引言 (1)1.1课程设计的目的和意义 (1)1.2课程设计的总体要求 (1)第2章需求分析 (2)2.1功能分析 (2)2.2业务流程图 (3)第3章详细设计 (5)3.1服务器的设计 (5)3.2客户端设计 (8)第4章实验心得与体会 (12)参考文献 (13)附录程序清单 (14)第1章引言第1章引言1.1课程设计的目的和意义在互联网高度发达的二十一世纪,网络之间的通信技术也日益发达,许多客户端之间的聊天工具也相应诞生,如腾讯 QQ,微软的 MSN、飞鸽等聊天软件也是在这个前提下诞生的。

计算机网络通信是以计算机为信息接收终端,融合了计算机网络技术的通信方式。

计算机网络通信顺畅的重要保障就是网络建设。

同时,网络建设也是计算机应用普及的基本条件,是推动经济社会发展的根本。

因此,了解计算机网络知识及网络编程技巧对于IT技术人员是必备技术之一。

1.2课程设计的总体要求本次课题要求设计实现设计与实现一个类似于“飞鸽传书”的CCUT文件传输软件,软件具有界面,利用TCP/IP协议提供的编程接口——Socket(套接字)可以开发出TCP/IP应用程序。

正确的使用WindowsSocket,就可使得不同地址下的进程得以在Windows环境下顺利进行各种网络通信,因此研究WinSock更有意义。

而基于TCP/IP协议网络环境下的应用程序是通过客户机/服务器(C/S)作用方式模式在网络(应用)编程界面实现的。

本次课程设计采用Java语言设计一个基于C/S模式的TCP网络通讯程序。

实现客户端与服务器端之间的数据传输。

具体要求:本次课题要求设计实现设计与实现一个类似于“飞鸽传书”的CCUT文件传输软件,软件具有界面。

(1)具有文件传输的主界面(2)实现IP信息设定,同局域网ccut文件传输软件登陆的IP搜索。

网络程序设计实验报告

网络程序设计实验报告

网络程序设计实验报告实验报告:网络程序设计一、实验目的本实验主要目的是通过网络程序设计的实践,提升学生对网络编程的理解和能力。

通过完成实验,学生需要掌握以下知识和能力:1.了解网络编程的基本概念和原理;2.熟悉TCP/IP协议栈中的各个协议;3.掌握Socket编程的基本方法和使用;4.学会利用网络进行进程间通信;5.了解常用的网络编程框架和库。

二、实验环境和工具1.计算机操作系统:Windows/Linux/MacOS;2.编程语言:C/C++/Java/Python等;3.开发工具:Visual Studio/Eclipse/PyCharm等。

三、实验过程与结果1.实验过程本次实验我们选择使用C语言进行网络程序设计,采用Socket编程进行实践。

首先,我们需要了解Socket编程的基本原理和方法。

Socket编程是一种应用程序设计接口(API),用于在网络上实现进程间的通信。

我们需要创建一个套接字(Socket),并使用Socket函数进行通信的建立和数据的传输。

在实际的网络程序设计中,先创建一个Socket,然后通过bind函数将Socket绑定到一个本地的端口上。

接着,使用listen函数将Socket设为监听状态,等待客户端的连接请求。

一旦有客户端请求连接,使用accept函数接受连接请求,并获得一个新的Socket,通过新的Socket进行数据的传输。

接下来,我们可以使用send和recv函数进行数据的传输。

send函数用于将数据发送给连接的另一方,而recv函数则用于从连接的另一方接收数据。

使用send函数发送数据时,需要指定数据的大小和发送的目标地址;而接收数据时,需要指定接收数据的大小和接收数据的缓冲区。

最后,通过close函数关闭Socket,释放资源,并结束网络连接。

2.实验结果经过实验,我们成功实现了一个简单的网络通信程序。

在服务器端,我们通过创建一个Socket,并将其绑定到本地的一个端口上;然后使用listen函数将Socket设为监听状态,并等待客户端的连接请求。

网络程序设计课程设计报告

网络程序设计课程设计报告

网络程序设计课程设计报告目录一.题目及要求 (3)1.题目:简单的聊天程序 (3)2.本实例程序的技术要求是 (3)二.系统概要设计 (3)1.程序分析 (3)2.功能流程图 (5)3.控件使用 (5)3.1 变量声明 (6)3.2 函数声明 (6)4. 界面设计 (6)5.程序执行结构图 (8)6.服务端程序的类与消息驱动 (8)三.系统详细设计 (9)1.主要函数介绍 (9)四.课程设计总结 (12)一.题目及要求1.题目:简单的聊天程序网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。

运用java程序编写聊天室,实现简单的聊天功能。

它是图形界面,线程,流与文件系统等技术的综合应用。

程序实现了聊天室的基本功能,其中有:1. 启动服务器。

2. 启动登陆界面。

3. 进入客户端界面。

4. 发送信息。

5. 离开客户端界面。

6. 关闭服务器。

2.本实例程序的技术要求是1. 如何从CasyncSocket类派生出自己的WinSock类。

2. 理解WinSock类与应用程序框架的关系。

3. 重点学习流式套接字对象的使用。

4. 处理网络事件的方法。

二.系统概要设计1.程序分析网络聊天室通常直称聊天室,是一种人们可以在线交谈的网络论坛,在同一聊天室的人们通过广播消息进行实时交谈。

在当今信息时代,越来越多的聊天工具被应用,java语言是当今流行的网络编程语言,它具有面向对象,与平台无关,安全,多线程等特点。

使用java语言不仅可以实现大型企业级的分布式应用系统,还能够为小型的的,嵌入式设备进行应用程序的开发。

面向对象的开发是当今世界最流行的开发方法,它不仅具有更贴近自然地语义,而且有利于软件的维护和继承,锻炼我们熟练地应用面向对象的思想和设计方法解决实际问题的能力。

本课程设计主要解决在客户端于客户端的信息交换和客户端于服务器的信息交换及服务器的信息处理上的管理的课程设计。

网络程序课程设计报告

网络程序课程设计报告

网络程序课程设计报告课程题目:基于tcp的音频录入存储程序班级:XX学号:XX姓名:XX设计题目基于tcp的音频录入存储程序设计意义随着网络的普及,图像,数据的信息交流已无法满足人们高品质,高要求的交互,因而视频语音传输技术应势而生。

语音视频信息的交流拉近人们的距离,即使亲朋远在他乡,也感觉近在身旁,不仅如此,在商业化的当今,各种会议琐碎繁多,视频或语音会议更是解决了参加会议人员的交通不便困难,总之网络视音频技术为现代化生活带来极大便利。

此次的课程设计,我们从最基本传输过程出发,设计实现由客户端录入音频,发送到服务器,由服务器保存存储的网络程序,功能简单,但却是各种功能强大的网络程序的基础,模拟音频从客户端到服务器的传递过程,能使我们更清楚地了解到此类音频交互网络程序的实现机理,对于我们以后的深入学习具有重要意义。

设计任务使用VC6.0编写一个网络程序,这个网络程序实现在客户端录入的音频,能够在服务器进行存储的功能。

我们首先搭建框架,设计出服务器和客户端的可视界面,对界面上的地址的录入框,连接按钮,监听按钮等添加实现代码。

加入头文件,成员函数,定义变量完备网络系统,调试,得到可运行的实现音频录入存储功能的网络程序。

一.设计内容(1)网络流程图二.设计过程(一)、打开Microsoft Visual C++编程软件,设计客户端和服务器的Dialog界面。

说明:连接设置下的框内填写要连接的服务器IP地址。

说明:保存路径是服务器存放由客户端传送来的音频的地方。

(二)实现代码客户端:①连接按钮void CClientDlg::OnButconnect(){// TODO: Add your control notification handler code hereUpdateData(TRUE);CString sip;m_IP.GetWindowText(sip); //读取服务器名称int port;port = 700; //获取端口if(! m_pClient->Connect(sip,port)) //连接服务器{MessageBox("连接服务器失败!");return;}}②发送按钮:void CClientDlg::OnButsend(){// TODO: Add your control notification handler code hereInitAudioDevice();}void CClientDlg::OnDestroy(){CDialog::OnDestroy();// TODO: Add your message handler code herefor(int i=0;i<=1;i++){waveInUnprepareHeader(m_hWaveIn,&lpInWaveHdr[i],4096);}if(m_pClient != NULL)delete m_pClient;}void CClientDlg::OnFieldchangedIpaddress1(NMHDR* pNMHDR, LRESULT* pResult){// TODO: Add your control notification handler code here*pResult = 0;}其它实现函数:③void CClientDlg::InitAudioDevice(){waveform.wFormatTag = WAVE_FORMAT_PCM ; // 采样方式,PCM(脉冲编码调制)waveform.nChannels = 2; // 双声道waveform.nSamplesPerSec = 11025; // 采样率11.025KHzwaveform.nAvgBytesPerSec = 11025; // 数据率11.025KB/swaveform.nBlockAlign = 1; // 最小块单元,wBitsPerSample×nChannels/8waveform.wBitsPerSample = 8; // 样本大小为8bitwaveform.cbSize = 0;lpInWaveHdr[0].dwBufferLength = 4096;lpInWaveHdr[0].lpData = lpInbuf;lpInWaveHdr[0].dwBytesRecorded = 0;lpInWaveHdr[0].dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;lpInWaveHdr[0].dwLoops = 1;lpInWaveHdr[0].dwUser = 0;lpInWaveHdr[0].lpNext = NULL;lpInWaveHdr[0].reserved = 0;lpInWaveHdr[1].dwBufferLength = 4096;lpInWaveHdr[1].lpData = lpInbuf1;lpInWaveHdr[1].dwBytesRecorded = 0;lpInWaveHdr[1].dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;lpInWaveHdr[1].dwLoops = 1;lpInWaveHdr[1].dwUser = 0;lpInWaveHdr[1].lpNext = NULL;lpInWaveHdr[1].reserved = 0;//打开录音设备waveInOpen(&m_hWaveIn,WAVE_MAPPER ,&waveform,(DWORD)m_h Wnd,0,CALLBACK_WINDOW);for(int i=0;i<=1;i++){waveInPrepareHeader(m_hWaveIn,&lpInWaveHdr[i],4096);}StartRecord();}④void CClientDlg::ReceiveData(){char buffer[2];//接收传来的数据int factdata = m_pClient->Receive(buffer,2);buffer[factdata] = '\0';if(buffer[0]='~')MessageBox("连接成功");服务器:①监听按钮:void CServerDlg::OnButlisten(){// TODO: Add your control notification handler code hereif(!m_pServer->Create(700)){MessageBox("套接字创建失败");delete m_pServer;m_pServer = NULL;return;}if (!m_pServer->Listen())MessageBox("监听失败");hData = GlobalAlloc(GMEM_MOVEABLE, 4096);lptr = (char*)GlobalLock(hData);}②选择路径:void CServerDlg::OnButpath(){// TODO: Add your control notification handler code hereCFileDialog dlg(false,NULL,NULL,NULL,"文件(*.wav)|*.wav||");if(dlg.DoModal()==IDOK){strName = dlg.GetPathName();strName += ".wav";m_path.SetWindowText(strName);}}③保存按钮:void CServerDlg::OnButsave(){// TODO: Add your control notification handler code hereif(strName.IsEmpty()){MessageBox("请选择保存的文件名");}waveform.nChannels = 2;waveform.wFormatTag = WAVE_FORMAT_PCM;waveform.cbSize = 0;waveform.wBitsPerSample = 8;waveform.nSamplesPerSec = 11052;waveform.nBlockAlign = waveform.nChannels * (waveform.wBitsPerSample / 8);waveform.nAvgBytesPerSec = waveform.nSamplesPerSec * waveform.nBlockAlign;//保存HMMIO hmmio;MMCKINFO ciRiffChunk;MMCKINFO ciSubChunk;MMIOINFO mmioInfo;TCHAR file[255];mmioInfo.dwFlags = 0;mmioInfo.fccIOProc = mmioStringToFOURCC("WAV", 0);mmioInfo.pIOProc = NULL;mmioInfo.wErrorRet = 0;mmioInfo.htask = 0;hBuffer = 0;mmioInfo.pchBuffer = 0;mmioInfo.pchNext = 0;mmioInfo.pchEndRead = 0;mmioInfo.pchEndWrite = 0;mmioInfo.lBufOffset = 0;mmioInfo.lDiskOffset = 0;mmioInfo.adwInfo[0] = 0;mmioInfo.adwInfo[1] = 0;mmioInfo.adwInfo[2] = 0;mmioInfo.adwInfo[3] = 0;mmioInfo.dwReserved1 = 0;mmioInfo.dwReserved2 = 0;mmioInfo.hmmio = 0;wsprintf(file,_T("%s"),strName);hmmio = mmioOpen(file, &mmioInfo,MMIO_CREATE | MMIO_WRITE | MMIO_ALLOCBUF);mmioSeek(hmmio, 0, SEEK_SET);ciRiffChunk.fccType = mmioFOURCC('W', 'A', 'V', 'E');ciRiffChunk.cksize = 0L;mmioCreateChunk(hmmio, &ciRiffChunk, MMIO_CREATERIFF);ciSubChunk.ckid = mmioStringToFOURCC("fmt", 0);ciSubChunk.cksize = sizeof(WAVEFORMATEX)-2;mmioCreateChunk(hmmio, &ciSubChunk, 0);mmioWrite(hmmio, (HPSTR)&waveform, sizeof(WAVEFORMATEX));mmioAscend(hmmio, &ciSubChunk, 0);ciSubChunk.ckid = mmioStringToFOURCC("data", 0);ciSubChunk.cksize = (nBuf-1)*4096+size;mmioCreateChunk(hmmio, &ciSubChunk, 0);mmioWrite(hmmio, (HPSTR)lptr,(LONG)(nBuf-1)*4096+size);mmioAscend(hmmio, &ciSubChunk, 0);mmioAscend(hmmio, &ciRiffChunk, 0);mmioFlush(hmmio, 0);mmioClose(hmmio, 0);MessageBox("已保存");}其它函数:④void CServerDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this); // device context for paintingSendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);// Center icon in client rectangleint cxIcon = GetSystemMetrics(SM_CXICON);int cyIcon = GetSystemMetrics(SM_CYICON);CRect rect;GetClientRect(&rect);int x = (rect.Width() - cxIcon + 1) / 2;int y = (rect.Height() - cyIcon + 1) / 2;// Draw the icondc.DrawIcon(x, y, m_hIcon);}else{CDialog::OnPaint();}}// The system calls this to obtain the cursor to display while the user drags // the minimized window.HCURSOR CServerDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}⑤void CServerDlg::AcceptConnect(){if(m_pServer->Accept(*m_pClient)){char a[1];a[0] = '~';m_pClient->Send(a,1);}}void CServerDlg::ReceiveData(CClientSocket *socket){HGLOBAL hGlobal = GlobalAlloc(GMEM_MOVEABLE,4096);char* lpBuf = (char*)GlobalLock(hGlobal);memset(lpBuf,0,4096);size = socket->Receive(lpBuf,4096);memcpy(lptr+(nBuf-1)*4096,lpBuf,4096*sizeof(BYTE));GlobalUnlock(hData);hData = GlobalReAlloc(hData, (++nBuf)*4096, GMEM_MOVEABLE);lptr = (char*)GlobalLock(hData);GlobalUnlock(hGlobal);GlobalFree(hGlobal);}void CServerDlg::OnDestroy(){CDialog::OnDestroy();// TODO: Add your message handler code hereGlobalUnlock(hData);GlobalFree(hData);if(m_pServer != NULL)delete m_pServer;if(m_pClient != NULL)delete m_pClient;}三.运行及结果分析①服务器选择保存路径,并监听。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《高级网络程序设计》课程设计报告题目FTP文件传输协议学号11102410姓名倪福柱计算机网络工程教研室2015年01月12 日目录一、实验目的………………………………………………………二、实验内容和要求………………………………………………..1、实验内容……………………………………………………..2、具体要求……………………………………………………..三、需要完成的的内容…………………………………………………………1.FTP系统模型…………………………………………………………….2. 系统功能设计……………………………………………………………2.1总体设计…………………………………………………………...2.2系统实现……………………………………………………………四、具体实现步骤………………………………………………………………..1. FTPClient用户界面的实现……………………………………………….2. FTPClient控制连接的实现……………………………………………….3. FTPClient数据传输连接的实现………………………………………….3.1下载文件操作………………………………………………………..3.1下载文件操作………………………………………………………..3.3显示服务器的路径…………………………………………………..3.4进入服务器更改路径………………………………………………..4. FTPServer控制连接的实现………………………………………………5. FTPServer数据传输线程的实现…………………………………………5.1读取本地文件下载给客户端…………………………………………5.2接收客户端的上传的文件……………………………………………5.3获取服务器本地系统路径……………………………………………五、实验结果…………………………………………………………………….六、实验心得…………………………………………………………………….天津科技大学计算机学院《高级网络程序设计》课程设计一、课程设计内容1、实验内容我们的计算机网络实验环境建立在TCP/IP 网络体系结构之上。

各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。

实验室各计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。

本实验要求学生利用这些功能,设计和实现一个简单的文件传送协议。

二、设计目的文件传送是各种计算机网络都实现的基本功能,文件传送协议是一种最基本的应用层协议按照客户/服务器的模式进行工作,提供交互式的访问,是INTERNET使用最广泛的协议之一。

本实验的目的是,学会利用已有网络环境设计并实现简单应用层协议,掌握TCP/IP 网络应用程序基本的设计方法和实现技巧。

三、具体要求用socket 编程接口编写两个程序,分别为客户程序(client.c)和服务器程序(server.c),该程序应能实现下述命令功能:get:取远方的一个文件put:传给远方一个文件pwd:显示远主当前目录pwd:显示远主当前目录cd :改变远方当前目录?:显示你提供的命令quit :退出返回这此命令的具体工作方式(指给出结果的形式)可以参照FTP 的相应命令,有余力的同学可以多实现几个命令。

最后,写出实验报告。

1.FTPSERVER服务器界面的实现自动获取服务器代码:{TcpListener myTcpListener = null;private Thread listenThread;// 保存用户名和密码Dictionary<string, string> users;public FtpServerForm(){InitializeComponent();// 初始化用户名和密码 users = new Dictionary<string, string>(); users.Add("admin", "admin");// 设置默认的主目录tbxFtpRoot.Text = "D:/MyFtpServerRoot/";IPAddress[] ips = Dns.GetHostAddresses("");tbxFtpServerIp.Text = ips[1].ToString();tbxFtpServerPort.Text = "21";lstboxStatus.Enabled = false;}服务器启动代码:// 启动服务器private void btnFtpServerStartStop_Click(object sender, EventArgs e){if (myTcpListener == null){listenThread = new Thread(ListenClientConnect);listenThread.IsBackground = true;listenThread.Start();lstboxStatus.Enabled = true;lstboxStatus.Items.Clear();lstboxStatus.Items.Add("已经启动Ftp服务...");btnFtpServerStartStop.Text = "停止";}else{myTcpListener.Stop();myTcpListener = null;listenThread.Abort();lstboxStatus.Items.Add("Ftp服务已停止!");lstboxStatus.TopIndex = lstboxStatus.Items.Count - 1;btnFtpServerStartStop.Text = "启动";}}监听客户端代码:private void ListenClientConnect(){myTcpListener = new TcpListener(IPAddress.Parse(tbxFtpServerIp.Text), int.Parse(tbxFtpServerPort.Text));// 监听端口,处理客户端连接myTcpListener.Start();AddInfo("启动FTP服务成功!");AddInfo("Ftp服务器运行中...[点击”停止“按钮停止FTP服务]");while (true){try{// 接收连接请求TcpClient tcpClient = myTcpListener.AcceptTcpClient();AddInfo(string.Format("客户端({0})与本机({1})建立Ftp连接"", tcpClient.Client.RemoteEndPoint, myTcpListener.LocalEndpoint));User user = new User();mandSession = new UserSeesion(tcpClient);user.workDir = tbxFtpRoot.Text;Thread t = new Thread(UserProcessing);t.IsBackground = true;t.Start(user);}catch{break;}}}处理客户端请求:private void UserProcessing(object obj){User user = (User)obj;string sendString = "220 FTP Server v1.0";RepleyCommandToUser(user, sendString);while (true){string receiveString = null;try{// 读取客户端发来的请求信息receiveString = mandSession.streamReader.ReadLine(); }catch(Exception ex){if (mandSession.tcpClient.Connected == false){AddInfo(string.Format("客户端({0}断开连接!)"mandSession.tcpClient.Client.RemoteEndPoint));}else{AddInfo("接收命令失败!" + ex.Message);}break;}if (receiveString == null){AddInfo("接收字符串为null,结束线程!");break;}AddInfo(string.Format("来自{0}:[{1}]",mandSession.tcpClient.Client.RemoteEndPoint, receiveString));// 分解客户端发来的控制信息中的命令和参数string command = receiveString;string param = string.Empty;int index = receiveString.IndexOf(' ');if (index != -1){command = receiveString.Substring(0, index).ToUpper();param = receiveString.Substring(command.Length).Trim();}// 处理不需登录即可响应的命令(这里只处理QUIT)if(command == "QUIT"){// 关闭TCP连接并释放与其关联的所有资源mandSession.Close();return;}else{switch (user.loginOK){// 等待用户输入用户名case 0:CommandUser(user, command, param);break;// 等待用户输入密码case 1:CommandPassword(user, command, param);break;// 用户名和密码验证正确后登陆case 2:switch (command){case"CWD":CommandCWD(user, param);break;case"PWD":CommandPWD(user);break;case"PASV":CommandPASV(user);break;case"PORT":CommandPORT(user, param);break;case"LIST":CommandLIST(user, param);break;case"NLIST":CommandLIST(user, param);break;// 处理下载文件命令case"RETR":CommandRETR(user, param);break;// 处理上传文件命令case"STOR":CommandSTOR(user, param);break;// 处理删除命令case"DELE":CommandDELE(user, param);break;// 使用Type命令在ASCII和二进制模式进行变换case"TYPE":CommandTYPE(user, param);break;default:sendString = "502 command is not implemented."; RepleyCommandToUser(user, sendString);break;}break;}}}}2.FTPClient客户端界面的实现登陆功能实现代码:private void btnlogin_Click(object sender, EventArgs e){if (tbxServerIp.Text == string.Empty){MessageBox.Show("请先填写服务器IP地址", "提示");return;}ftpUristring = "ftp://" + tbxServerIp.Text;networkCredential = new NetworkCredential(tbxUsername.Text, tbxPassword.Text);if (ShowFtpFileAndDirectory() == true){btnlogin.Enabled = false;btnlogout.Enabled = true;lstbxFtpResources.Enabled = true;lstbxFtpState.Enabled = true;tbxServerIp.Enabled = false;if (chkbxAnonymous.Checked == false){tbxUsername.Enabled = false;tbxPassword.Enabled = false;chkbxAnonymous.Enabled = false;}else{chkbxAnonymous.Enabled = false;}tbxloginmessage.Text = "登录成功";btnUpload.Enabled = true;btndownload.Enabled = true;btnDelete.Enabled = true;}else{lstbxFtpState.Enabled = true;tbxloginmessage.Text = "登录失败";}}注销:private void btnlogout_Click(object sender, EventArgs e){btnlogin.Enabled = true;btnlogout.Enabled = false;tbxServerIp.Enabled = true;tbxServerIp.SelectAll();tbxServerIp.Focus();chkbxAnonymous.Enabled = true;if (chkbxAnonymous.Checked == false){tbxUsername.Enabled = true;tbxPassword.Enabled = true;}tbxloginmessage.Text = "你已经退出了。

相关文档
最新文档