大连工业大学课程设计(论文)任务书
专业计算机、信计班级计08(1-3)、信计081 课程名称计算机网络
题目设计编写一个基于Winsock套接字的网络通信程序——聊天、文件传输或电子邮件程序。
指导教师路莹答疑教师路莹
设计时间2011年6 月 27 日至 2011年7 月 1 日共一周
设计要求设计(论文)的任务和基本要求,包括设计任务、查阅文献、方案设计、说明书(计算、图纸、撰写内容及规范等)、工作量等内容。
课程设计要求:
1、采用B/S模式或C/S模式,上机编写代码,实现网络通信,并调试成功。推荐题目至
少完成一个,编程实现,不得采用现有的应用软件。要求界面美观,系统操作灵活、便于用户使用:
●聊天程序:完成广播的公共聊天平台和单播的私人聊天,并应具有简单的帐号管
理功能;
●文件传输程序:完成服务器端可供传输文件浏览、客户端目标路径可选、指定文
件传输等功能;
●电子邮件程序:完成客户端在线收、发邮件,管理邮件等功能。
2、撰写课程设计报告——题目、目的、方案设计、调试结果、心得体会。
3、周一查阅资料,设计方案;周二至周四上机编写代码,调试实现;周五演示程序、答
辩,并上交课程设计报告。
4、两名同学一组,自由组合,并根据完成任务量情况署名。
5、撰写课程设计报告:封皮(设计题目、专业、班级、学生姓名、学生学号、指导教师
姓名、起止时间)、具体任务、软件环境、算法设计思想及流程图、
源代码、运行结果、收获及体会、参考文献
成绩评定方法:
按对Winsock套接字基本知识的掌握程度,选定软件项目的典型性和难度,分析设计方案是否正确,功能实现是否完善,文档说明是否清楚、准确,格式是否规范等环节评分。
成绩按优、良、中、及格、不及格五级分制评定。
指导教师签字:路莹系(教研室)主任签字:
2009年11 月24日
计算机网络
课程设计报告设计题目:C#编写简单聊天程序
专业计算机科学与技术
班级计算机081
学生1 。。。
学生2 。。。
指导教师路莹
起止时间2011.6.27—2011.7.1
引言
这次课程设计我选择了做一个聊天程序,虽然很多同学是和我们一样选了同一个题目,也许功能叶相差无几,但这不是最重要的。腾讯QQ、MSN-Messenger。已经成为我们日常生活中和亲朋好友经常联系的很好的工具,作为计算机专业的学生,我认为对这些身边的实用软件我们应该有更深刻的认识,理解他是如何工作的,知道各种功能又是如何实现的,所以我们选择了这个题目。
当今主流的聊天工具有QQ、ICQ、MSN、Yahoo messenger等,国内最热门的当属QQ是深圳市腾讯计算机系统有限公司开发的一款基于Internet的即时通信(IM)软件。本课程设计主要是设计并实现一个简单的聊天程序,该聊天程序能够支持点对点聊天,聊天的内容可以支持文本信息,还可以发送文件,上传图片等,聊天程序包括服务器程序和客户端程序。在课程设计中系统的开发平台为VS2008,程序运行平台为Windows XP。
一、需求分析
采用C/S模式,上机编写代码,实现网络通信,并调试成功。推荐题目
至少完成一个,编程实现,不得采用现有的应用软件。要求界面美观,系统
操作灵活、便于用户使用,聊天程序:完成广播的公共聊天平台和单播的私
人聊天,并应具有简单的账号管理功能。
1.1功能需求分析
(1)用户端之间的信息发送,本程序需要实现的最基本的功能。用户在界面上可以将自己需要发送的信息填入相应的对话框中,点击发送按钮后,可以将信息正常的发送给相应的其它用户,这个过程中的客户端与客户端之间使用点对点发送信息。
(2)在线用户主机IP列表的维护。在用户发送信息之前,需要选择相应的
目的地端IP,这也就需要客户端拥有在线用户主机的IP地址,这个在线主机列表的维护是需要客户端定时自动向服务器端发送信息,服务器端收集并维护在线用户列表,再发送回客户端。连接成功与否都会有相应的提示信息。
(3)在C/S模式中,服务器与客户端是相互依赖的。在客户端启用以后,需要查看服务器端是否在线,服务器在线才能正常使用客户端,如果服务器不在线,则在检测一定次数以后自动退出客户端程序。在使用过程中,可以发送消息和文件图片,如果退出,则点击停止,关闭即可。
1.2数据需求分析
(1)客户端之间聊天信息。在控件上显示时格式化,更易于用户的查看自己发送或接收到的信息。
(2)在线用户聊天信息。服务器端存放在适当的空间中,在发送给客户端时,对信息列表进行格式化,便于客户端提取信息。
(3)客户端向服务器端发送的确认在线信息。包括客户端刚刚启动时的初始化信息和在使用过程中的确认在线信息。
(4)其它程序内部可能需要设计的数据结构体。
1.3性能需求分析
(1)可靠性高,能在由于系统问题或其它原因产生错误后,作出相对应处理,比如网络初始化失败、服务器不在线等,可以提示用户安全退出本程序,在出现不可知的错误以后,可以尽量安全的退出程序。在程序的设计过程中,要求能尽可能多的设想到用户使用过程中可能发生的事件,并能在判断事件后做出相应的处理,使程序具有较高的容错性能。
(2)宜操作性,程序简单易懂,容易上手使用。设计界面是,简化界面的复杂性,模拟QQ等现有即时通讯工具的界面,使用户能很容易看懂并使用。
(3)开发文档易理解,保证以后自己二次开发或他人接手开发时,能够清晰的理解整个系统的设计思路和实现细节。
(4)模块化设计此软件的功能,不同的模块实现不同的功能,使得软件易于以后的维护与扩展,在以后可以更好的完善本软件的功能,更方便于在工作中的应用。
1.4运行需求分析
(1)用户界面
程序较小,启动速度快。可在网络中使用,需进行点击开始。启动后的应用界面要清爽,设计要简单明了,要具有较高的易用性。
(2)故障处理
在遇到可预知的故障与情况时,能提示用户并自动退出;在遇到不可预知的故障时能安全退出。
二、概要设计
2.1算法流程图
聊天室的总体设计过程比较简单主要是构建设计框图。,就是当客户端发出信息时,我们将数据写到socket,当对方有数据到达时,我们从socket读出来并显示给客户。程序关键在于如何监听到有信息到达的过程。应用程序流程图如下图所示,开始是先创建主窗口,然后初始化窗口,程序下面才开始消息循环处理。如果没有消息循环的活,直接结束掉这个程序。如果有循环的话,要判断这个窗口消息的内容是哪种类型,然后再进行选择处理方式。然后依据不同的内容选择“创建控件”,还是要“判断命令”,或是分别处理各种socket的消息。流程图如图2-1所示
开始
创建窗口
初始化
判断窗口消息
判断命令
Bind
Listen 分别处理各种Socket 消息connect
创建控件SOCKET
连接
CREAT
继续消息循环
Yes
COMMAN
侦听
结束处理结束
NO
图2-1聊天室设计架构图
2.2 系统环境
软件环境
系统环境:Windows xp
编译环境:VS2008
编译语言:C#
硬件环境
CPU 266HZ以上,64M以上内存,4G以上硬盘
三、详细设计
聊天室主要包括两个模块,服务器模块、客户端模块。该聊天室可以支持点对点聊天,支持文本信息、文件以及图片传输。
(1)服务器模块(主要代码)
Resources.Designer.cs
namespace WinQQ.Properties
{
[global::https://www.wendangku.net/doc/9a14475346.html,piler.GeneratedCodeAttribute("System.Resources.Tools.Str onglyTypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::https://www.wendangku.net/doc/9a14475346.html,pilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performa nce", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
///
/// 返回此类使用的、缓存的ResourceManager 实例。
///
[global::https://www.wendangku.net/doc/9a14475346.html,ponentModel.EditorBrowsableAttribute(global::https://www.wendangku.net/doc/9a14475346.html,ponentModel.E ditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinQQ.Properties.Resources",
typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
///
/// 为所有资源查找重写当前线程的CurrentUICulture 属性,
/// 方法是使用此强类型资源类。
///
[global::https://www.wendangku.net/doc/9a14475346.html,ponentModel.EditorBrowsableAttribute(global::https://www.wendangku.net/doc/9a14475346.html,ponentM odel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
(2)客户端模块(主要代码)
Resources.Designer1.cs
namespace WinQQClient.Properties
{
[global::https://www.wendangku.net/doc/9a14475346.html,piler.GeneratedCodeAttribute("System.Resources.Tools.Strongly TypedResourceBuilder", "2.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::https://www.wendangku.net/doc/9a14475346.html,pilerGeneratedAttribute()]
internal class Resources
{
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources()
{
}
///
/// 返回此类使用的、缓存的ResourceManager 实例。
///
[global::https://www.wendangku.net/doc/9a14475346.html,ponentModel.EditorBrowsableAttribute(global::https://www.wendangku.net/doc/9a14475346.html,ponentModel.E ditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager
{
get
{
if ((resourceMan == null))
{
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("WinQQClient.Properties.Resources",
typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
///
/// 为所有资源查找重写当前线程的CurrentUICulture 属性,
/// 方法是使用此强类型资源类。
///
[global::https://www.wendangku.net/doc/9a14475346.html,ponentModel.EditorBrowsableAttribute(global::https://www.wendangku.net/doc/9a14475346.html,ponentModel.E ditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture
{
get
{
return resourceCulture;
}
set
{
resourceCulture = value;
}
}
}
}
四、调试分析
(1)点击开始服务器端启动,如下图所示
图4-1
(2)点击开始客户端启动连接成功,如下图所示
(3)发送部分信息之后,传输文件,如下图所示
(4)点击确定保存文件,如下图所示
图4-4 (5)文件传输完毕,接收成功,如下图所示
图4-5 (6)发送图片表示感谢,如下图所示
图4-6
(7)客户端退出,如下图所示
图4-7(8)问题分析
开始的时候遇到的最大的麻烦就是不能读入和输出汉字,产生了乱码和问号;另外有时会出现用户列表无法更新、服务器端无法显示客户连接和断开信息,系统动态时间无法获取等等。对于汉字问题我的解决办法是另外选择了一种读入数据流方法,
有时是关联问题,以及输出显示格式,获取信息一些细节步骤如果出错
就会产生意想不到的错误,无法解决,还越改越乱。所以要养成多多的注释
和一步一步的修改,避免不可恢复,造成重大的损失。
五、课程设计总结
经过努力,基本上完成我们的聊天程序的课程设计,也基本上那个实现
了老师需求分析时所预期的功能。为了完成这次课程设计,我们一边上网查
找相关资料,另一方面查阅相关书籍。在这过程中也无形的锻炼了我们的思
维分析、遇到问题、想方设法通过各种途径解决问题以及搭档之间的默契合
作的能力。
另外就是知识方面的问题,计算机网络有很多方面的知识还是很不熟悉,具体用到的时候就感觉生疏,或者还是缺乏设计方面的实践。课程设计的机会不是很多,由于所学的知识包含了太多的方面,所以实践方面还是远远不够,希望在学校期间能够多一些类似的机会。
虽然课程设计顺利的完成了,但由于水平有限,还是有很多的欠缺跟不足之处,希望老师给予指正。通过这次的课程设计,使我们把从书本上学到的理论知识用到了实践,从而进一步巩固和丰富了我们所学过的知识,让我们更加深层次的认识到C#及其强大的功能,同时,做这课程设计,也进一步加强了我们的综合能力。
参考文献
[1] 谢希仁编著计算机网络(第5版)电子工业出版社2010
[2] 软件开发课堂C# 基础与案例开发详解清华大学出版社王国胜
刘攀尼春雨编著
[3] 百度知道