网络编程课程设计-.docx

上传人:夺命阿水 文档编号:1791674 上传时间:2024-12-27 格式:DOCX 页数:10 大小:36.96KB
返回 下载 相关 举报
网络编程课程设计-.docx_第1页
第1页 / 共10页
网络编程课程设计-.docx_第2页
第2页 / 共10页
网络编程课程设计-.docx_第3页
第3页 / 共10页
网络编程课程设计-.docx_第4页
第4页 / 共10页
网络编程课程设计-.docx_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《网络编程课程设计-.docx》由会员分享,可在线阅读,更多相关《网络编程课程设计-.docx(10页珍藏版)》请在课桌文档上搜索。

1、随着计算机网络技术的飞速开展,比方基于互联网的信息发布,通信,数据共享等等。网络技术越来越受到人们的盘视,它已逐渐渗入我们生活的各个层面,网络聊天工具在丰富的网络生活中也扮演了歪要的角色.陶若计算机网络技术的开展,很多政府机构,企业,学校,都是先以一个统一的同域网联结在一起,再分别接入INTERNET.因此基丁局域网的即时通信工具,就这样应运而生了。所以本系统主要完成了在局域网内的简单异步聊天功能,并在WINDOWS平台上加以了实现.程序分为客户端和效劳器端两个程序。用多线程实现不同的并行任务*并进行了人性化的界面设计,使用起来更加简单方便,并且功能十分合理,又易于扩展以及个性化定制。本文通过

2、局域网聊天系统来具体共享内存实现进程间的数据交换,利用WindoWS消息机制实现进程间的同步,两种机制结合使用。关键词:异步聊天:局域网:即时通信:客户端:效劳端:多线程:进程同步:12)在线用户主机名列表的维护。(3)在C/S模式中,效劳器与客户端是相互依赖的。(4)操作简雎,界面荷洁美观,有背景,有字体设置,有表情选择等。2.2系统应具备的根本功能2.3开发环境及工具2.3.1 运行环境Windows系统在装有Visua1.studio25及以上版本的系统2.3.2 C#网络编程技术介绍s这些类和方法可以帮助我们进行网络编程,通过网络进行通信.通信可以是面向连接的,也可以是面向无连接的;既

3、可以采用数据流模式,也可以采用数据报的模式.广泛使用的TCP协议用基于数据流的通信,而UDP协议用于基于数据报的通信.Systein-Net.Sokcets-Socket是Syse11.Net.Socke1.s名空间下面一个非常i宾要的类.每一个套接字的实例都有一个本地的和一个远程的端点附加在上面.本地的端点包括了当前套接字实例的连接信息.,NET还提供了其它的一些类用于我们进行网络编程,像IPEndPoint.IPAddress.SockeiExcepiion等等.NET支持同步和异步两种在客户机和效劳器之间的通信方式.NET提供了不同的方法用于支持这两种类型的通信,同步的方法工作在阻塞模式

4、,方法在工作完成之前是不返回的,但是异步的方法工作在非阻塞模式,但是立即返回的,可能在快作完成之前.DnS类位于S名空间下,它用于创立和发送个请求用于从DNS效劳器获取一个主机效劳器的信息.当然,在访问DNS之前,机器必须首先要连接到网络上,当在一台独立的机器上执行DNS隹询时,由于无法连接到DNS效劳器,就会产生一个Systm.Nct-SockctExccption异常.这个类的所有成员方法都是静态的.这个类中最重要的方法是:PUbIiCstaticIPHostEntryGe1.HostByddress(stingaddress)地址应该是一个用点开的正确的IP地址,这个方法返回一个IPHo

5、stEmry实例,它包括了主机的信息,如果DNS效劳器不可用.这个方法聘产生一个SockctExccpiion异常.pub1.icstaticstringGCIHoStNameo这个方法返回本地机涔的DNS效劳器名称.pub1.icstaticIPHostEntryReso1.ve(stringhostname)这个方法解析个DNS主机名称或IP地址为一个IP加WEn1.ry实例.主机名称应该是一个用点分开的IP地址,如:127.0Q1.IPHOStEnIry类,IPHOS1.Entry类是一个容器类,它包含INTERNET上主机的地址信息.这个类不是线程平安的.下面是这个类的几个重要成员.A

6、ddress1.ist属性,该属性给H1.个IPAddreSS的数组,可以获取或设置与主机关联的IP地址列表.A1.iases属性,该属性用于获取或设置与主机关联的别名列Manua1.ResctEvcnt允许线程通过发信号互相通信.通常,此通信涉及一个线程在其他线程进行之前必须完成的任务.当一个线程开始一个活动(此活动必须完成后,其他线程才能开始)时,它调用Reset以将Manua1.ResetEvent置于非终止状态.此戏程可被视为控制Manua1.ResetEvent调用ManiiaIRese1.Event上的Wai1.One的线程将咀止.并等待信号.当控制线程完成活动时.它彻用Set以发

7、出等待线程可以继续进行的信号.并拜放所有等待浅程.一旦它被终止Manu川RCsCtEVCnt将保持终止状态.直到它被手动加置.即对Wai1.One的调用将立即返回,可以通过将布尔伊传递冷构造函数来控制ManUa1.ReSe(EVen1.的初始状态,如果初始状态处于终止状态,为1.ne:否那么为fa1.se2.3.3 ViSua1.Studio开发环境介绍Visua1.Studio2005和.NETFramework2.0将在应用程序开发的所有方面取得大幅进展。首先,Visua1.Studio2005根据开发人员个人的需要调整软件开发体验,设置新的开发人员工作效率标准。这一“个性化工作效率”将在

8、开发环境和.NETFrameWork类库中提供相应的功能,以帮助开发人员在最少的时间内克服其最为紧迫的困难。其次,Visua1.Studio2005使开发人员能够通过与MicrosoftOfficeSystem和SQ1.Server2005的更好集成,在更广泛的应用程序开发方案中应用现有的技能。最后,Visua1.Studio2005耨提供一组新的工具和功能,以满足目前大规模企业的应用程序开发需要.ComboBox1.1.nvokascmmboboKcaHbackc1.icnt.C1.icm.RcmotcE11dPoint.TString();DataReadWritedatareadwrit

9、e=newDataReadWrite(C1.ient);c1.ien1.1.ist.Add(da1.anedwriie):ScndString(datarcaditc.e!);dacarcadwritc.ns.BcginRcad(da(arcadwritc.rcad.Ogth,ReadCa1.IBack,datareadwrite);Icatch(Exceptionc)(1.is(BoxS(a(us.1.nvoke(set1.is(boxca1.1.backe.Message);return:)从客户端读取信息处理的异步回调方法privatevoidReadca1.1.BacMIAsyncRe

10、suItiar)IIry(Da1.aReadWritcdatareadwrite=(DataReadWrite)iar.AsyncS(a1.e;intreev=datarcadwritc.ns.EndRcad(iar);rich1.cxtBoxI.1.nvokc(sctrichtcxboxca1.1.tack,string.Format(M|(0)|(kuea:if(isExit=fa1.se)Idaiaadwri(e.1.ni(Rea1.Array();da1.arcadwriie.ns.BeginRead(da1.arcadwri1.e.vad.O.gth.KeadCa1.1.Back.d

11、atareadwrite):)catch(Exceptionc)I1.iscBoxS:ComboBox1.1.tcms.Add(bj);J发送数据privatevoidbutton1_C1.ick(objcctsender.EventArgsc)(intindex=ComboBox1.SeIeciedIndex;if(index=-1)IMCZigCBox.Shw(,请先选择接收方,声单击发送”);)e1.seIsiringsi=效劳器端+oomboBox2.Se1.ectedhem+”对你说:二sirings2=richTex1.Box2.Text:stringScndstring=S1.+

12、s2:DataRcadWritcobj=(DataRcadVritc)c1.icnt1.is(index;SendS(ring(objSendsiringVZif1.JIJSendString方法发送数据richTex1.Box2.C1.eart):stringSc1.fstring=你可0+comboBox2.Sc1.cctcd1.cm+说:+s2+Wn”:FichIcxtBoxI.AppcndText(sc1fs(ring);)效劳器停止privatevoidbutton3-C1.ick(objcc(sender,Evcn1.Argsc)(isExi(=true:a1.1.Donc.Sct

13、();huton2.Enab1.cd-true;bion3.Enab1.ed=fa1.se;)privatevoid字体1.bo1.StripMcnuhem_C1.ick(objectsender.EvcntArgsc)(FontDiaIogfo11(Dia1.og=newFontDiaIogO;(ontDia1.og.Co1.or=richTextBx1.FotcCoIoefontDia1.og.A1.1.owScripChangc=true:fntDia1.og.Sho,Co1.or=true;if(fontDia1.og.ShowDia1.og!=Dia1.QgResuIttCanceI

14、)(richIcxtBoxI.Sc1.cctionFont=fontDia1.og.Font:rich1.cxtBoxI.Sc1.cciionCokx=fontDia1.og.Co1.r;richTex(Box2,Se1.ec(ionFo11=fb11(Dia1.og.Fog.C1.or:)IprivatevoidFormI-1.oad(objectsender,EYenIArgSe)(COmbOBoX2Jtcms-Add(笑着地):8mboBox2.Items.Add(快乐地8mboBox2.Item乳AddC含怡脉脑地COmbUBuX2.Items.Add(微笑地):COmboBoX2.I

15、tems-Add(幸福地comboBox2Jtcms.Ad点脸红地”):8mboBox2.Items.Add(使劲机地conboBx2.Items.Add(Ii1.言自语地comboBox2.1tcms.Add(.点要哭地);8mboBox2.1tems.Add(嚎咐大哭地8mboBox2.Item$.AddC把鼻涕地8mboBox2.I1.ems.Add不怀好意地COmbOBox2.1.tcms.Add(神秘兮兮地COmboBoX2.Items.Add(不知所指地8mboBox2Jte11.Addc笑蓿地):)1I二、效劳器端验证输入的IP地址是否符合标准pub1.ics(aicboo1.C

16、bcckIPAddrcsMstringIP)(stringpa(1.cm=(d(1.)|(IVi(2)K2(M)d)|(25O-5)(3)(0d(1.2)1.(1.d2)1.(2(O-4Jd)K25(O-5Dr:SyMcm-Text.Rcgu1.arExpressions.Rcgcxregex=newSys(em.TexCa1.1.kckcnncc1.Cd1.Back=newAsyncCa1.1.back(Connec1.Ca1.1.Back);a1.1.Done.Rcsct():c1.ient.BcginConncct(ip,58888,ConncctCaIIBack,C1.iCnU;1.i

17、s(BoxS(a(u$.1.nvoke(Set1.istboxca1.1.backfcSirin-Formai一本机终结点(0)m.dicnt.C1.ien1.Uca1.EndPoint):IiaBOXStaUIS.InVOkC(SetIiStbOXCai1.baCk开始与效劳器连接);a1.1.DwcVaitOnc();)e1.seIMessagcBox.Show(*I地址fi入错iK*);)privatevoidConncctCa1.1.Back(1.AsyncRcsu1.tiar)(a1.1.Done.Se();IIy(c1.ient-(TcpCIicnt)iar.AsyncStatc;

18、c1.iem.EniConnec(iar);1.is1.BoxSta1.us.Invoke(set1.istboxca)1.back.SIring.Forma1.与劳器(0)连接成功c1.icnt.C1.icnt.RcmotcEndPoint):ns=c1.icnt.Gc1.Srcam();DataReaddaaRea1.=newDataRerd(ns.c1.ie11(,ReoeiveBfferSize);ns.BeginReaddataRe4d.msg.O.dataReid.msg.1.ength.ReadCaIIBack.dataKead);)catch(Exceptione)(1.ist

19、BoxStatus.1.nvokc(set1.istboxca1.1.back.c.Mcssagc):return;)privatevoidRcadCaIIBack(1AsyncRcsu1.tiar)DataRcaddataRcad:(DataRead)iar.AsyncState;in(reev二da(aRead.ns.EndRead(iar);richTex1.Box1.Invke(sctRihTextBoxReceiveCai1.Bauk.Systcn1.Tcxt.Encoding.UIT,8.GetString(dataRcad.11sg.0.rccv):if(is1.ivc=fa1.

20、se)(da1.uRead=newDdIdRead(ns.CIiCnI.ReccivcBufferSizc):ns.BcginRcad(dataRead.msg.0.dataRcad.ngth.RcadCaIIBack.(IataRcad);)Icatch(Exceptionc)(1.is(BoxS(a(us.1.nvoke(set1.is(boxca1.1.backe.Message);I)privatevoidSCndData(Stringstr)(Iry(byebytesda(a=Sysem.Text.Encoding.UTF8.GeBytes(str+,n);ns.BeginWri1.

21、e(by(csdata.0.bytes:)privatevoidSe1.1.istBox(s1.ringsir)(1.stBoxS:)privatevoidSCIRiChTbXIBOKRaCiVc(S1.rmgstr)(richTextBoxI.AppcndTexKsir;JprivatevoidFormI_FomiC1.osing(objecisender,FonDCIosingEventArgse)(is1.ivc=true;a1.1.Donc.Sci();)privatevoidbinton1.C1.iCk(ObjCCtsender.EvcntArgsc)(siringsi=oomboB

22、ox3.Se1.cctedItem+”对你说:“:strings2=richTcxtBox2.,Icxt;stringScndsiring三sis2;SendData(Sends1.ring);richTcx1.Box2.Ckar():stringSc1.fstring=你对效劳第+c(HnboBox3.Sc1.cctcd1.tcm+说:+s2+,;richTcx(BoxI.AppcndTcxt(sc1.fs(ring);)privatevoid号体TDO1.StriPMCnUItCm_C1.iCk(Objcctsender.EvcntArgsc)(FomDiaIogfon(Dia1.og二n

23、ewFoinDia1.ogO;fontDia1.og.Co1.r=rich1.extBx1.ForcCoIorfontDia1.og.A1.1.owScrip(Changc=true:fbntDia1.og.ShosCo1.or=true;if(fontDia1.og.ShowDia1.ogO!=DiaIogResuh.CanceI)(richTcxtBox1.Se1.cctionEont=IbntDia1.og.Fon1.:rich1.cx1.BoxI.Sc1.ccuonCokx-fontDia1.og.Co1.or;rich1.x1.Box2.Se1.eciionFon二fb11Dia1.

24、og.Fon(;rich1.ex1.Box2.Se1.ec1.inCo1.or=fon1.Diakg.C1.or:)Iprivatevoid文件FIbo1.Sg();str=HIc1.Fi1.cNamc:richTcx(Box2.1cxt=sir;JprivatevoidForm1_1.oad(objectsender.EventArgse(Comtx)BOx3.1.tCmS.Add(笑着地”);8mboBox3.Iiems.AddC快乐地8mboBox3JtemS.Add(含情脉脓地”):COmbOBoX3.Items.Add1.微笑地):COmboBOX3.Items.Add(“幸福地”)

25、;8mboBox3.Iiem$,Addr有点脸红地8mboBox3.hems.A:emboBox3.hcms.Addr差点要犬地”;COmboBox3JIemSAdd(喙啕大哭地”):8mboBox3Items.Add(一把鼻涕地COinboBOx3.Itcms.Add(不怀好意地”):COnIbOBm3.hems.Add神秘兮兮地8mboBox3J1.em$.Add(不知所措地CQmbOBOX3.1ICmS.Add(笑着地”):)5.系统测试与分析5.1 测试1 .启动效劳器端开始监听2 .启动客户端输入IP地址,验证IP地址是否正确,错误就提示3 .客户端请求建立连接4,效劳港端接收客户端

26、得连接,发送提示欢送提示5 .客户端和效劳器端互发消息6 .客户端和效劳泯端分别接收消息7 .测试在两台或者两台以上的主机上运行程序,运行成功。结论在当今电脑网络密布的世界当中,一个简雎高效的局域网通信工具是如此的具有实用性,所以我们应当重视对它的相关研究与开发。在这次课程设计中,我应用了Visua1.Studio2(X)5开发工具在WINDOWS平台上开发一个基于W1.NDOwS平台的局域网聊天工具,在这一重要的领域进行了相关的实践,不管是对我的研窕能力,还是实际动手能力,还是资料查阅能力,都起了相当大的益处。通过这次课程设计,我了解了TCP套接字编程的根本步骤,以及多线程的使用,学习了许多新的东西。另外,我也在这次设计中看到了自己的许多缺乏之处,由于对C#下的网络编程不是很熟悉,所以花费了很多时间在根本问题的纠结上。参考文献C#网络程序设计Bpower工作室编著北京中国铁道出版社C#网络应用开发例学与实践郭常圳编著北京清华大学出版社C#开发典型模块大全明日科技王晓科吕双编著人民邮电出版社1.inux网络端程甘南编著中国水利水电出版社

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 在线阅读 > 生活休闲


备案号:宁ICP备20000045号-1

经营许可证:宁B2-20210002

宁公网安备 64010402000986号