《局域网通信设计报告(共20页).doc》由会员分享,可在线阅读,更多相关《局域网通信设计报告(共20页).doc(20页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上课程设计(论文)局域网通信系统论文作者:指导教师:专 业:系 (院):答辩日期:目录专心-专注-专业摘 要即时通讯软件是目前计算机用户进行交流最普遍的方式之一,各种各样的聊天软件也层出不穷;服务提供商也提供了越来越丰富的通讯服务功能。即时通信中最基本的功能就是通过计算机之间的文本数据的互换的形式实现思想的交流和沟通,它的优点是方便快捷,为人们之间创建了一种新型的、廉价的、快速的、简便的沟通方式。本系统是基于UDP的局域网聊天工具。从实现了面向无连接的点对点异步通信,在此基础上应用了多线程技术解决了局域网多用户间的通信问题。聊天程序以Visual Studio 2008
2、为基本开发环境和C# 语言进行编码设计实验表明该聊天工具能够为局域网内部人员提供一个很好的交流平台,方便了工作上的交流与协同。本课题开发了一个基于局域网内部的消息通讯平台。在此平台上可以实现内部用户之间的实时通讯,使用户之间能更及时、更方便有效的沟通信息。实现了局域网内部电子信息化的交流,提高了工作效率。本系统有如下功能:1、信息的接受和发送功能:包括文字信息以及图像信息。2、添加好友功能:能够通过IP查找到相对应的用户以及添加其为自己的好友。3、数据本地化功能,将好友信息保存在本地.4、图片发送与接收,保存到本地功能.5、截屏功能6、更换头像功能一、 绪论1.1 即时通信系统的概念即时通讯(
3、Instant Messenger,简称IM),是指能够即时发送和接收互联网消息等的业务。自1998年面世以来,特别是近几年的迅速发展,即时通讯的功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。即时通讯不再是一个单纯的聊天工具,它已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。是一种终端连网即时通讯网络的服务。即时通讯不同于e-mail在于它的交谈是即时的。大部分的即时通讯服务提供了状态信息的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。 近年来,随着无线通信的快速发展,移动互联网为传统的Internet注入了新
4、的活力,同时也为即时通讯带来了一场革命,交互双方已经不再局限于以网络终端设备为唯一的接入手段,PC机在传统的网络即时通讯中所起的作用正在被手机、平板电脑所取代。这使得即时通讯更加大众化和人性化,即使不会使用电脑的人现在也可以享受到即时通讯给人们带来的变化。1.2 UDP协议UDP 是User Datagram Protocol的简称, 中文名是用户数据报协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务,IETF RFC 768是UDP的正式规范。在选择使用协议的时候,选择UDP必须要谨慎。在网络质量令人不十分满意的环境下,UDP协议数据包丢失会比较严重。
5、但是由于UDP的特性:它不属于连接型协议,因而具有资源消耗小,处理速度快的优点,所以通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。1.3 开发背景在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ、网络聊天时一类的聊天系统的发展日新月异。但是,QQ等现有的聊天程序也存在着很大的问题。比如使用QQ的时候,就对各种弹窗广告深恶痛绝。对于登陆后时不时弹出的打扰窗口,很是厌烦。因此在本次作业下产生了一个制作类似QQ的网络聊天工具并且
6、“无垃圾信息”洁净聊天工具的想法,而且希望通过制作该程序还能更好的学习网络软件编程知识。1.4 运行环境1.本系统基于Visual Studio 2008设计,适用于WINDOWS XP,WIN7,WIN8等系统。2.运行环境仅限于局域网,否则无法正常通信.3.使用C#语言开发1.5程序核心流程图如图1.1所示:接收Receive发送Send客户端1关 闭Listen监听端口Udp图1.1程序核心流程图1.6功能设计1) 自动获取本机IP,并监听指定端口有无消息接收。2) 界面显示:将已添加好友显示在好友列表中,如有不是好友向本机发消息,将自动添加为好友。3) 聊天功能:与好友聊天。4) 好友
7、纪录:能保存好友信息至本地,并能察看。5) 更换头像:双击头像,能够更换头像显示 6) 发送图片:在聊天界面选择要发送的图片进行发送。7) 截屏:将截取整个屏幕,并且保存到指定位置。如图1.2所示: 图1.2 功能设计图 客户端截 取 屏 幕保存好友信息添删备注好友更 改 头 像接收各种信息获取本机IP地址二、 主要界面及功能的实现2.1界面设计1)主界面如图1.3所示:图1.3主界面图2)添加好友界面如图1.4所示:图1.4添加好友图3)更换头像界面如图1.5所示:图1.5更换头像界面图4)搜索界面如图1.6所示:图1.6搜索界面图5)聊天界面如图1.7所示:图1.7聊天界面图6)修改备注界
8、面如图1.8所示:图1.8修改备注图2.2编码实现2.2.1 主程序初始化函数改函数的主要功能为创建UDP实例,并且开启新线程监听消息收发端口,,以及从本地加载好友信息,添加至主界面的ListBox控件列表中void Form1_Load(object sender, EventArgs e) uc = new UdpClient(6959); LIPAddress.Text = getInfo.myIp(); Thread th = new Thread(new ThreadStart(listen); th.IsBackground = true; th.Start(); /-填充List
9、Box- loadXMLList(); if (friendsList.Items.Count != 0)/选中列表第一个 friendsList.SelectedIndex = 0;2.2.2监听端口方法该方法主要功能是监听端口信息,收到消息后首先判断是否已存在该好友的聊天窗口,如果存在只发送消息到窗口,否则创建新的窗口实例,并且弹出聊天界面。还实现了陌生好友来信后自动添加信息至ListBox和本地。IPEndPoint iep; string text,text1; byte b; private void listen()/监听端口 iep = new IPEndPoint(IPAddr
10、ess.Parse(getInfo.myIp(), 6959); while (true) text = ; b = uc.Receive(ref iep); text = System.Text.Encoding.UTF8.GetString(b); if (text != ) text1 = text; MethodInvoker mi = new MethodInvoker(openNewForm); BeginInvoke(mi); public void openNewForm() CommForm cf=null; if (!listIP.Contains(iep.Address.
11、ToString() Friend f = new Friend(); f.IpAddress = iep.Address.ToString(); f.NickName = ; SaveOrLoad.addNodeXML(f); loadXMLList(); if (listForm.Count = 0) cf = new CommForm(listFriend, iep.Address.ToString(),listIP); cf.Name = iep.Address.ToString(); cf.rMessage(text1, iep.Address.ToString(),b); cf.S
12、how(); listForm.Add(cf); else foreach (CommForm f in listForm) if (f.Name = iep.Address.ToString() f.rMessage(text1, iep.Address.ToString(),b); else cf = new CommForm(listFriend, iep.Address.ToString(), listIP); cf.Name = iep.Address.ToString(); cf.rMessage(text1, iep.Address.ToString(),b); cf.Show(
13、); listForm.Add(cf); 2.2.3 添加好友方法该方法实现的功能为 单击主界面的添加好友按钮,弹出添加好友对话框,输入对面IP后点击确定返回IP,并添加至本地和ListBox控件。private void button2_Click(object sender, EventArgs e) AddFriendForm aff = new AddFriendForm(); if (aff.ShowDialog() = DialogResult.OK) if (!listIP.Contains(aff.IpAdd) Friend f = new Friend(); f.IpAddr
14、ess = aff.IpAdd; f.NickName = ; SaveOrLoad.addNodeXML(f); friendsList.Items.Add(aff.IpAdd);/列表添加 loadXMLList(); else MessageBox.Show(已存在); 2.2.4 删除好友该方法实现的功能为右击ListBox控件弹出右键菜单,单击后删除好友。private void 删除ToolStripMenuItem_Click(object sender, EventArgs e) if (friendsList.SelectedIndex != -1) SaveOrLoad.D
15、elNodeXML(friendsList.SelectedIndex); friendsList.Items.Remove(friendsList.SelectedItem.ToString(); loadXMLList(); else MessageBox.Show(没有选择任何项); 2.2.5修改好友备注该方法实现的功能为右击ListBox控件弹出右键菜单,单击后弹出修改对话框输入后返回输入信息。private void 备注ToolStripMenuItem_Click(object sender, EventArgs e) if (friendsList.SelectedIndex
16、 != -1) ChangeNameForm aff = new ChangeNameForm(); if (aff.ShowDialog() = DialogResult.OK) SaveOrLoad.UpdateNodeXML(friendsList.SelectedIndex, aff.ChangeName); friendsList.ItemsfriendsList.SelectedIndex= aff.ChangeName; loadXMLList(); else MessageBox.Show(没有选择任何项); 2.2.6修改头像该方法主要实现了双击主界面的头像,弹出头像选择窗体
17、,单击喜欢的头像后,实现头像的修改。private void pictureBox1_DoubleClick(object sender, EventArgs e) TouxForm tf = new TouxForm(); if (tf.ShowDialog() = DialogResult.OK) pictureBox1.Image = tf.ImagePath; 2.2.7截图功能该方法主要实现电机主界面截图按钮,实现全屏截图,然后保存至本地。private void button3_Click(object sender, EventArgs e) this.Visible = fal
18、se; System.Threading.Thread.Sleep(200); Bitmap bit = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); Graphics g = Graphics.FromImage(bit); g.CopyFromScreen(new Point(0, 0), new Point(0, 0), bit.Size); SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDi
19、alog.Filter = bmp|*.bmp|jpg|*.jpg|gif|*.gif; if (saveFileDialog.ShowDialog() != DialogResult.Cancel) bit.Save(saveFileDialog.FileName); g.Dispose(); this.Visible = true; 2.2.7 聊天界面初始化方法这几个函数主要实现了UPD的初始化,接收来源好友的信息,判断是否已经备注决定窗体标题的显示,如果没有备注显示对方IP否则显示对方备注。public CommForm(List listFriend, string ips, Lis
20、t listIP) InitializeComponent(); ip = ips; uc = new UdpClient(); this.listFriend = listFriend; this.listIP = listIP; this.Load += new EventHandler(CommForm_Load2); void CommForm_Load2(object sender, EventArgs e) if (listIP.Contains(ip) int i=listIP.IndexOf(ip); if (listFriendi.NickName = ) this.Text
21、 = ip; else this.Text = listFriendi.NickName + - + ip; public CommForm(List listFriend, int selectIndex) InitializeComponent(); uc = new UdpClient(); this.listFriend = listFriend; this.selectIndex=selectIndex; this.Load += new EventHandler(CommForm_Load); void CommForm_Load(object sender, EventArgs
22、e) if (listFriendselectIndex.NickName = ) ip = this.Text; else ip = listFriendselectIndex.IpAddress; this.Text+= - +ip; 2.2.8 消息接收并显示该方法主要将收到的消息以及要发送的消息显示到聊天界面的TextBox中。public void rMessage(string message, string name, byte b) if (b.Length 100) ByteArrayToImage(b, b.Length); else DateTime dt = DateT
23、ime.Now; mess.Text += dt.Month + / + dt.Day + + dt.Hour + : + dt.Minute + + name + rnrn; mess.Text += message + rnrn; mess.SelectionStart = mess.Text.Length; mess.ScrollToCaret(); 2.2.9 图片发送以及保存方法这几个方法主要实现了将收到的二进制图片数据通过ByteArrayToImage()方法转换为图片数据,并且显示到PictureBox控件中同时可以按保存按钮将接收到的图片保存到本地。public void B
24、yteArrayToImage(byte byteArrayIn, int count) MemoryStream ms = new MemoryStream(byteArrayIn, 0, byteArrayIn.Length); Image returnImage = Image.FromStream(ms); this.pictureBox1.Image = returnImage; btnSave.Visible = true; string path; private void button3_Click(object sender, EventArgs e) OpenFileDia
25、log open = new OpenFileDialog(); open.Filter = jpg|*.jpg|gif|*.gif; if (open.ShowDialog() != DialogResult.Cancel) pictureBox1.Image = Image.FromFile(open.FileName); path = open.FileName; button4.Visible = true; private void button4_Click(object sender, EventArgs e) IPEndPoint iep = new IPEndPoint(IP
26、Address.Parse(ip), 6959); FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read); BinaryReader binaryReader = new BinaryReader(fileStream); byte img = binaryReader.ReadBytes(int)fileStream.Length); binaryReader.Close(); fileStream.Close(); /发送信息 try uc.Send(img, img.Length, iep
27、); catch(Exception ex) MessageBox.Show(文件过大); private void btnSave_Click(object sender, EventArgs e) SaveFileDialog saveFileDialog = new SaveFileDialog(); saveFileDialog.Filter = bmp|*.bmp|jpg|*.jpg|gif|*.gif; if (saveFileDialog.ShowDialog() != DialogResult.Cancel) pictureBox1.Image.Save(saveFileDia
28、log.FileName); 三、软件测试软件测试是程序的一种执行过程,目的是尽可能发现并改正被测试软件中的错误,提高软件的可靠性。它是软件生命周期中一项非常重要且非常复杂的工作,对软件可靠性保证具有极其重要的意义。在目前形式化方法和程序正确性证明技术还无望成为实用性方法的情况下,软件测试在将来相当一段时间内仍然是软件可靠性保证的有效方法。软件工程的总目标是充分利用有限的人力和物力资源,高效率、高质量地完成软件开发项目。不足的测试势必使软件带着一些未揭露的隐藏错误投入运行,这将意味着更大的危险让用户承担。通过自己在自己机器上通过多个进程的测试和通过两台机器联机测试,本程序完全实现了概要设计和详
29、细设计的各种功能,满足了提出的各种要求。但是,测试期间也发现了不少问题,而且这些问题中有些以我们现在的水平还无法解决,只能说是测试是否能够通过程序验证。所以,对于本程序中的问题,还要通过在以后的学习中解决。由于时间和自己的能力有限,该系统还有很多不足和需要改善的地方。如:好友在线时才能发送消息和文件,界面还不够美观,功能还不完全等等, 还不能像飞鸽这种局域网通讯软件一样成功,需要更加丰富的经验和更多知识技能和更多的时间与精力去完善。对于本系统的展望:该系统还有很多可以改进的地方,希望以后有时间和能力去改进。比如:改变聊天字体的大小和字体、发送表情、增加截图功能、发送抖动窗体,视频与语音功能、远
30、程协助等功能。四、结论经过几天的课程设计,即时局域网通讯系统终于完成了。本文在对相关理论知识的基础上设计了一个基于UDP协议的即时通讯系统,分析系统的工作流程,并应用.NET平台具体实现了一些基本的功能,如:即时聊天、添加好友和分组、删除好友和分组、图片传输等。本系统功能虽简单,但目的的了解基于.NET的窗体应用程序的开发过程,如果要完善系统还需更多的时间。课程设计的过程是一个学习与研究的过程,而且,我深刻地认识到如果在实践中学习与研究,所学习的知识和技能就会更扎实。我使用.NET为开发平台,Socket等相关技术完成系统,虽然系统已基本完成,但我对于.NET的核心技术和高级编程还是很陌生,不
31、能熟练运用,对于C#语言也不是很熟悉,这是我以后需解决的问题。在此次的毕业设计中,我深深地体会到进行软件开发不是一件容易的事情,它需要开发者具备全面的专业知识、严谨的工作态度、缜密的思维以及较高的分析问题、解决问题的能力,而我在很多方面还有欠缺。总之,我以后要多专心研究软件开发,以更加饱满的热情投入到本专业的学习中去,认真做好每一件事情,争取得到更多的收获。通过这次用C#设计的新闻发布系统,我也明白了很多整理。它使我懂得了理论与实际的相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力
32、。课程设计是对以前学过的理论知识的回顾同时也是进一步的消化和巩固的过程。毕业设计培养了严肃认真和实事求是的科学态度,也培养了吃苦耐劳的精神以及相对应的工程意识,同学之间的友谊互助也充分的在毕业设计当中体现出来了。但是由于课程设计时间较短,所以该系统还有许多不尽如人意的地方,比如功能不太完善,用户界面不够美观,还有很多不足的地方。这些都有待进一步的改善。这次毕业设计基本完成预定目标,在这次毕业设计中我学到了新的知识,也提高了我的动手能力,分析和解决问题的能力。致 谢在本次毕业设计中,我非常感谢曾经为我纠正错误及指导我的人。尤其是我的指导老师,我从指导老师梁老师身上也学到了很多东西。老师那严谨教学
33、的工作态度、治学精神和深厚的理论水平都使我受益匪浅。她平时工作非常忙,但还是经常抽时间向我们询问有关毕业设计的问题,在系统的制作过程中她给予了我很多的指导,使我得到不少的提高,通过梁老师对我悉心的指导,使我的设计更加完善,最重要的是激励我对待任何事情都要积极、认真的态度。我想这些对我在今后正式的走进社会中会有很大影响和帮助。参考文献1ASP.NET网络程序设计教程.北京:人民邮电出版社,出版2012年2月2C#.NET程序设计项目教程.中国铁道出版社,出版2008年9月3SQL Server 2008应用实践教程.北京:电子工业出版社,出版2010年5月4SQL Server 2008数据库实用教程.北京:电子工业出版社,出版2010年2月5九州书源.SQL Server 数据库管理与应用.第2版.北京:清华大学出版社,出版2011年12月6李晓静.Photoshop图形图像处理.北京:清华大学出版社,出版2011年8月7周苏峡,李建利.Web数据库应用实例教程 .北京交通大学出版社,出版2008年7月8Nicholas C.Zakas.JavaScript高级程序设计.第3版.李松峰,曹力译.人民邮电出版社,出版2012年3月