网络编程课程设计1.docx
- 文档编号:30596953
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:28
- 大小:254.22KB
网络编程课程设计1.docx
《网络编程课程设计1.docx》由会员分享,可在线阅读,更多相关《网络编程课程设计1.docx(28页珍藏版)》请在冰豆网上搜索。
网络编程课程设计1
指导老师评阅成绩表
学习与工作态度(30%)
选题的价值与意义(10%)
文献综述(10%)
研究水平与设计能力(20%)
课程设计说明说(论文)撰写质量(20%)
学术水平与创新(10%)
总分
指导老师签名:
年月日
课程设计答辩记录及评价表
学生
讲述情况
教师主要
提问记录
IP地址是怎么判断合不合法的?
怎么把FORM的名字改了?
字体大小和颜色的改变是怎么实现的?
Encoding.UTF8.GetBytes编码是怎么实现的,为什么要用这个?
正则表达式的[]和{}有什么区别?
学生回答
问题情况
1.调用函数publicstaticboolCheckIPAddress(stringIP)来完成的IP验证。
2.在Form的属性里面修改Text就可以了。
3.添加menuStrip1控件,添加字体项目,调用设置方法就可以完成了。
4.用这个编码可以把汉字编码。
5.[0-9]{3,4}的意思是匹配0—9之间的数至少三次之多四次,
也就是说整则表达式的[]表示匹配一个,{}表示匹配多少次。
答辩评分
评分项目
分值
评价参考标准
评分
总分
优
良
中
及格
差
选题的价值与意义
10
9
8
7
6
4
文献综述
10
9
8
7
6
4
研究水平与设计能力
20
19
17
15
13
10
课程设计说明书(论文)撰写质量
20
19
17
15
13
10
学术水平与创新
10
9
8
7
6
4
答辩效果
30
28
25
22
19
15
是否同意论文(设计)通过答辩
□同意□不同意
答辩小组成员签名
答辩小组组长签名:
年月日
课程设计成绩评定表
成绩汇总
评分项目
评分
比例
分数
课程设计总分
指导老师评分
50%
答辩小组评分
50%
成都信息工程学院
课程设计
题目:
异步TCP简单通信程序
作者姓名:
纪红
班级:
信息安全08级四班
学号:
2008122127
指导教师:
林宏刚
日期:
2011年6月21日
作者签名:
摘要
随着计算机网络技术的飞速发展,比如基于互联网的信息发布,通信,数据共享等等。
网络技术越来越受到人们的重视,它已逐渐渗入我们生活的各个层面,网络聊天工具在丰富的网络生活中也扮演了重要的角色。
随着计算机网络技术的发展,很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET.因此基于局域网的即时通信工具,就这样应运而生了。
所以本系统主要完成了在局域网内的简单异步聊天功能,并在WINDOWS平台上加以了实现.程序分为客户端和服务器端两个程序。
用多线程实现不同的并行任务。
并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。
本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。
关键词:
异步聊天;局域网;即时通信;客户端;服务端;多线程;进程同步;
1引言
1.1课题背景
近年来,随着全球信息化进程的不断发展,网络也在飞速发展。
出于高效、快速地处理各种事务的目的,越来越多的企业在其内部使用局域网来进行工作。
在内部局域网的帮助下,企业得以简化信息流程,提高信息交换的速度,从而提高工作效率。
然而,随着企业规模的扩大,业务量的增加,在局域网上运行的应用越来越多,如知识库、网络会议、数据库应用和数据的同步与备份等,这些应用对局域网的信息吞吐、处理能力的要求也越来越高。
这些在企业内部原有局域网设计之初未曾考虑到的新情况的出现使得局域网不堪重负,容易发生信息阻塞,此时,局域网不但不能提高生产效率,反而成为企业发展的瓶颈。
为了解决上述矛盾,人们提出了许多方法。
提升网络带宽及增加服务器的吞吐能力是解决此矛盾的一种方法。
然而,从企业运行的成本方面考虑,无论是单纯地提升网络带宽或增加服务器的吞吐能力都不能从根本上解决局域网资源紧张的问题,对旧有局域网的大规模硬件改造反而会增加企业的负担。
本系统是一种基于Socket的局域网通信工具的设计与实现方法。
基于Socket的局域网通信软件可以为企业原有的局域网提供一种良好,安全,快速的通信机制。
它的实现无需对企业原有的局域网硬件进行任何改动,具有实现成本低廉的优点,它的使用能有效地降低局域网通信负荷,提高局域网的使用效率,可以很好地解决企业内部局域网的各种通信需求。
基于Socket的局域网聊天工具是此类局域网通信软件的具体实例之一,它很好地诠释了Socket通信的原理,并且在企业内部通信、教学、讨论等应用中都具有一定的实用价值。
它具有信息收发速度快,保密性好,占用网络带宽资源低,占用服务器吞吐能力低,易于编程实现等优点。
基于Socket的局域网通信软件应用范围广阔,不但可以处理传统的通信需求,而且也能扩展以适应新型的网络应用,如网络教育,数据影音传输等,拥有广泛的应用前景。
1.2国内外现状
基于局域网的即时通信工具,实际上是互联网即时通信工具的一个小规模版本,广域网上的即时通信工具,如今一般采用UDP或者TCP协议体系来实现,开发技术已经比较成熟,比如较早的ICQ,MSNMessanger,Yahoo通这些国外开发的产品,还有国产的有名的QQ,新浪UC,LAVA-LAVA等,这些工具统统都实现了广域网上的即时通信,尽管都是即时通信,实现了即时聊天,以及文件传输的主要功能,但是也各有各的特色,比如ICQ的巨大客户群,MSN的个性化表情,YAHOO通的易操作性等。
而QQ也具有一个相当方便的屏幕截图功能,另外就是,所有上述软件都实现了网络即时的视频,语音聊天功能。
这些软件,在使用方面各有特色,在实现方面也各有所长,但基于这些产品正在商业运营阶段,其实现方式属于商业机密,具体细节不可能得知,但是它在大的方面无非就是各种利用各种平台上的网络通信接口,建构基于下层TCP/IP,或者UDP/IP协议的软件产品。
在局域网内,这些功能的实现跟广域网相比更加简单,因为局域网的网络结构本身比广域网要复杂,但是又可以借些理解网络协议,以及网络通信工具的实现原理,所以仍然极具研究价值。
1.3本课题研究的迫切性
随着计算机网络技术的发展,很多政府机构,企业,学校,都是先以一个统一的局域网联结在一起,再分别接入INTERNET.因此基于局域网的即时通信工具,就这样应运而生了。
所以本系统主要完成了在局域网内的简单异步聊天功能,并在WINDOWS平台上加以了实现.程序分为客户端和服务器端两个程序。
1.4本课题的研究作用
所以本系统主要完成了在局域网内的简单异步聊天功能,并在WINDOWS平台上加以了实现.程序分为客户端和服务器端两个程序。
用多线程实现不同的并行任务。
并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。
本文通过局域网聊天系统来具体共享内存实现进程间的数据交换,利用windows消息机制实现进程间的同步,两种机制结合使用。
1.5本文的主要工作
本文主要工作是设计一个基于WINDOWS平台的局域网即时聊天工具,然后阐述本软件的功能、特点及使用方法,并详细阐述开发本软件所用的相关技术,具体分析本软件的各个模块的功能及实现方法,说明本软件的设计思想及方法。
2.TCP异步聊天系统需求分析及开发工具
2.1系统目标
(1)用户端之间的信息发送,本程序需要实现的最基本的功能
(2)在线用户主机名列表的维护。
(3)在C/S模式中,服务器与客户端是相互依赖的。
(4)操作简单,界面简洁美观,有背景,有字体设置,有表情选择等。
2.2系统应具备的基本功能
2.3开发环境及工具
2.3.1运行环境
Windows系统在装有Visualstudio2005及以上版本的系统
2.3.2C#网络编程技术介绍
.NET提供了两个用于网络编程的名空间:
System.Net和System.Net.Sockets.这些类和方法可以帮助我们进行网络编程,通过网络进行通信.通信可以是面向连接的,也可以是面向无连接的;既可以采用数据流模式,也可以采用数据报的模式.广泛使用的TCP协议用基于数据流的通信,而UDP协议用于基于数据报的通信.
System.Net.Sokcets.Socket是System.Net.Sockets名空间下面一个非常重要的类.每一个套接字的实例都有一个本地的和一个远程的端点附加在上面.本地的端点包括了当前套接字实例的连接信息.
.NET还提供了其它的一些类用于我们进行网络编程,像IPEndPoint,IPAddress,SocketException等等..NET支持同步和异步两种在客户机和服务器之间的通信方式..NET提供了不同的方法用于支持这两种类型的通信.同步的方法工作在阻塞模式,方法在工作完成之前是不返回的.但是异步的方法工作在非阻塞模式,但是立即返回的,可能在操作完成之前.
Dns类位于S名空间下,它用于创建和发送一个请求用于从DNS服务器获取一个主机服务器的信息.当然,在访问DNS之前,机器必须首先要连接到网络上,当在一台独立的机器上执行DNS查询时,由于无法连接到DNS服务器,就会产生一个Systm.Net.SocketException异常.这个类的所有成员方法都是静态的.这个类中最重要的方法是:
publicstaticIPHostEntryGetHostByAddress(stringaddress)地址应该是一个用点开的正确的IP地址,这个方法返回一个IPHostEntry实例,它包括了主机的信息.如果DNS服务器不可用,这个方法将产生一个SocketException异常.publicstaticstringGetHostName()这个方法返回本地机器的DNS服务器名称.publicstaticIPHostEntryResolve(stringhostname)这个方法解析一个DNS主机名称或IP地址为一个IPHostEntry实例.主机名称应该是一个用点分开的IP地址,如:
127.0.0.1IPHostEntry类,IPHostEntry类是一个容器类,它包含INTERNET上主机的地址信息.这个类不是线程安全的.下面是这个类的几个重要成员.AddressList属性,该属性给出一个IPAddress的数组,可以获取或设置与主机关联的IP地址列表.Aliases属性,该属性用于获取或设置与主机关联的别名列
ManualResetEvent允许线程通过发信号互相通信。
通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。
当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用Reset以将ManualResetEvent置于非终止状态。
此线程可被视为控制ManualResetEvent。
调用ManualResetEvent上的WaitOne的线程将阻止,并等待信号。
当控制线程完成活动时,它调用Set以发出等待线程可以继续进行的信号。
并释放所有等待线程。
一旦它被终止,ManualResetEvent将保持终止状态,直到它被手动重置。
即对WaitOne的调用将立即返回。
可以通过将布尔值传递给构造函数来控制ManualResetEvent的初始状态,如果初始状态处于终止状态,为true;否则为false
2.3.3VisualStudio开发环境介绍
VisualStudio2005和.NETFramework2.0将在应用程序开发的所有方面取得大幅进展。
首先,VisualStudio2005根据开发人员个人的需要调整软件开发体验,设置新的开发人员工作效率标准。
这一“个性化工作效率”将在开发环境和.NETFramework类库中提供相应的功能,以帮助开发人员在最少的时间内克服其最为紧迫的困难。
其次,VisualStudio2005使开发人员能够通过与MicrosoftOfficeSystem和SQLServer2005的更好集成,在更广泛的应用程序开发方案中应用现有的技能。
最后,VisualStudio2005将提供一组新的工具和功能,以满足目前大规模企业的应用程序开发需要。
3.系统总体结构设计
3.1基本简介
1.首先启动服务器端和客户端
2.服务器端开始监听
3客户端开始连接
4.服务器端接收客户端的连接请求
5.建立连接
6.开始聊天
7.加入了表情,字体,颜色等的设计
3.2系统功能模块设计
3.2.1客户端
3.2.2服务器端
4.系统流程实现
4.1系统设计流程
4.2详细设计
一、服务器端
开始监听
//开始服务器
privatevoidbutton2_Click(objectsender,EventArgse)
{
//侦听客户连接请求
ThreadmyThread=newThread(newThreadStart(AcceptConnection));
myThread.Start();
button2.Enabled=false;
button3.Enabled=true;
}
privatevoidAcceptConnection()
{
//IPAddress[]ip=Dns.GetHostAddresses(Dns.GetHostName());
IPAddressip=IPAddress.Any;
listener=newTcpListener(ip,58888);
listener.Start();
while(isExit==false)
{
try
{
allDone.Reset();
//应用在异步操作完成时调用的回调方法
AsyncCallbackcallback=newAsyncCallback(AcceptTcpClientCallBack);
listBoxStatus.Invoke(setlistboxcallback,"开始等待连接...");
//开始接受客户端的连接
listener.BeginAcceptTcpClient(callback,listener);
allDone.WaitOne();//使当前进程挂起,知道接收到客户的连接
}
catch(Exceptione)
{
listBoxStatus.Invoke(setlistboxcallback,e.Message);
break;
}
}
}
//异步操作完成时调用的回调方法
privatevoidAcceptTcpClientCallBack(IAsyncResultiar)
{
try
{
allDone.Set();//设置无信号状态的事件
TcpListenermylistener=(TcpListener)iar.AsyncState;
//异步接收传入的连接,并建立新的TcpClient对象处理信息
TcpClientclient=mylistener.EndAcceptTcpClient(iar);
listBoxStatus.Invoke(setlistboxcallback,"已接受客户连接:
"+client.Client.RemoteEndPoint);
comboBox1.Invoke(setcomboboxcallback,client.Client.RemoteEndPoint.ToString());
DataReadWritedatareadwrite=newDataReadWrite(client);
clientlist.Add(datareadwrite);
SendString(datareadwrite,"welcome!
");
datareadwrite.ns.BeginRead(datareadwrite.read,0,datareadwrite.read.Length,ReadCallBack,datareadwrite);
}
catch(Exceptione)
{
listBoxStatus.Invoke(setlistboxcallback,e.Message);
return;
}
}
//从客户端读取信息处理的异步回调方法
privatevoidReadCallBack(IAsyncResultiar)
{
try
{
DataReadWritedatareadwrite=(DataReadWrite)iar.AsyncState;
intrecv=datareadwrite.ns.EndRead(iar);
richTextBox1.Invoke(setrichtextboxcallback,string.Format("[{0}]{1}",datareadwrite.client.Client.RemoteEndPoint,System.Text.Encoding.UTF8.GetString(datareadwrite.read,0,recv)));
if(isExit==false)
{
datareadwrite.InitReadArray();
datareadwrite.ns.BeginRead(datareadwrite.read,0,datareadwrite.read.Length,ReadCallBack,datareadwrite);
}
}
catch(Exceptione)
{
listBoxStatus.Invoke(setlistboxcallback,e.Message);
}
}
//向客户端发送数据的方法
privatevoidSendString(DataReadWritedatareadwrite,stringstr)
{
try
{
datareadwrite.write=System.Text.Encoding.UTF8.GetBytes(str+"\r\n");
datareadwrite.ns.BeginWrite(datareadwrite.write,0,datareadwrite.write.Length,newAsyncCallback(SendCallBack),datareadwrite);
datareadwrite.ns.Flush();
listBoxStatus.Invoke(setlistboxcallback,string.Format("向{0}发送:
{1}",datareadwrite.client.Client.RemoteEndPoint,str));
}
catch(Exceptione)
{
listBoxStatus.Items.Add(e.Message);
}
}
//发送回调函数
privatevoidSendCallBack(IAsyncResultiar)
{
DataReadWritedatareadwrite=(DataReadWrite)iar.AsyncState;
try
{
datareadwrite.ns.EndWrite(iar);
}
catch(Exceptione)
{
listBoxStatus.Invoke(setlistboxcallback,e.Message);
comboBox1.Invoke(removecomboboxcallback,datareadwrite);
}
}
//移出客户
privatevoidRemoveComboBoxItems(DataReadWritedatareadwrite)
{
intindex=clientlist.IndexOf(datareadwrite);
comboBox1.Items.RemoveAt(index);
}
//状态显示
privatevoidSetListBox(stringstr)
{
listBoxStatus.Items.Add(str);
listBoxStatus.SelectedIndex=listBoxStatus.Items.Count-1;
listBoxStatus.ClearSelected();
}
//接收客户端信息
privatevoidSetReceiveText(stringstr)
{
richTextBox1.AppendText(str);
}
//添加客户
privatevoidSetComboBox(objectobj)
{
comboBox1.Items.Add(obj);
}
//发送数据
privatevoidbutton1_Click(objectsender,EventArgse)
{
intindex=comboBox1.SelectedIndex;
if(index==-1)
{
MessageBox.Show("请先选择接收方,再单击发送");
}
else
{
strings1="服务器端"+comboBox2.SelectedItem+"对你说:
";
strings2=richTextBox2.Text;
stringsendstring=s1+s2;
DataReadWriteobj=(DataReadWrite)clientlist[index];
SendString(obj,sendstring);//调用SendString方法发送数据
richTextBox2.Clear();
stringselfstring="你对{0}"+comboBox2.SelectedItem+"说:
"+s2+"\r\n";
richTextBox1.AppendText(selfstring);
}
}
//服务器停止
privatevoidbutton3_Click(objectsender,EventArgse)
{
isExit=true;
allDone.Set();
button2.Enabled=true;
button3.Enabled=false;
}
pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 课程设计