课程设计报告-基于udp协议的网络聊天程序设计

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

《计算机网络编程》综合程序设计项目基于UDP协议的网络聊天程序设计院(系、部):信息工程学院姓名:班级:指导教师签名:2011年4月16日·北京1目录1需求分析........................................................21.1课程设计目的................................................21.2课程设计内容................................................21.3课程设计要求................................................22概要设计........................................................22.1原理概述....................................................22.2功能模块调用流程设计.........................................33详细设计........................................................43.1流程图......................................................43.2运行效果图..................................................53.3主要源代码.................................................124项目分析与总结.................................................174.1遇到的问题和解决方法.......................................174.2心得体会...................................................1821、需求分析1.1课程设计目的开发一个专用于实现两台计算机之间即时通讯的软件,以方便两台计算机之间信息的交流。,在连接并通信时,尤其是近程的即时通讯,彻底的脱离了远程的服务器,避免了和远程服务器连接时过多的浪费网络资源。并且避免了服务器忙或与服务器无法连接时,浪费过多时间用于和服务器建立连接!因此,这个软件是极具适应性和实用性的即时通讯软件!本次课程设计的目的是学习基于UDP协议实现网络聊天程序,已达到学会面向无连接方式的程序设计方法,并理解网络编程中面向无连接的概念。1.2课程设计的内容用户数据报(UDP)是一个无连接协议,使用这种协议时,并不需要在两台计算机之间建立固定的连接,也就是说,通信双方没有服务器和客户机之分,它们之间进行的是对等通信,所以它的优势很明显,是现代通信不可或缺的一部分。所以,利用它的优势设计一个可以实现私聊和群聊的软件,实现两台计算机间的即时通讯。1.3课程设计要求基于UDP协议实现一对一的聊天和一对多的聊天,提供友好的用户界面,便于用户进行操作。根据目前使用聊天程序的用户需求显示,用户对于聊天程序主要有以下几点要求:(1)聊天功能:可以实现实时接收和发送文字信息,并能支持公聊和私聊的方式。(2)用户功能:可以查看对方的开放信息,以及发送方的IP。2概要设计2.1原理概述采用UDP协议,通过服务器中转方式。因此,现在的IP侦探在你仅仅跟对方发送聊天消息的时候是无法获取到IP的。UDP协议是不可靠协议,它只管发送,不管对方是否收到。但它的传输很高效,因为UDP协议排除了信息可靠传递机制,将安全和排序等功能移交给上层应用来完成,极大降低了执行时间,使速度得到了保证。例如,腾讯采用了上层协议来保证可靠传输:如果客户端使用UDP协议发出消息后,服务器收到该包,需要使用UDP协议发回一个应答包。如此来保证消息可以无遗漏传输。32.2功能模块调用流程设计:Socket()Bind()Close()服务器客户端Socket()Close()ReceiveFrom()/SendTo()Shutdown()Bind()ReceiveFrom()/SendTo()Shutdown()双向通信43详细设计3.1流程图输入组播地址及段口号开始初始化各个控件不可发送消息点击”开始聊天”按钮进行群聊判断是否进行群聊判断是否进行私聊输入IP地址及段口号点击”开始聊天”按钮进行私聊选择在线的私聊对象输入发送信息点击”发送”按钮在”接收发信息”框中显示聊天记录在”接收发信息”框中接收信息点击”清屏”按钮在”接收发信息”框中清除聊天记录点击”断开”按钮断开连接,不可发送信息点击”退出”按钮结束NYYYYYYY退出程序NNNNN53.2界面设计与运行效果图://界面设计//测试程序:初始化界面,组播地址为224.100.0.1,端口号为6553。6//测试程序:点击开始聊天,组播地址为224.100.0.1,端口号为6553,开始群聊。//测试程序:界面显示群聊接收发消息。7//测试程序:选择在线的私聊对象。//测试程序:输入对方IP地址,进行固定的私聊。8//测试程序:不正确的情况——端口号为空时。//测试程序:不正确的情况——超出端口号范围时。9//测试程序:不正确的情况——端口号不合法时。//测试程序:以上情况均不能正确发送信息。10//测试程序:不正确的情况——组播地址非法时。//测试程序:不正确的情况——发送的输入信息为空。11//测试程序:点击清屏按钮接收发消息框清空。//电脑桌面程序栏中托盘图标123.3主要源代码:namespacechat{publicpartialclasschat:Form{privatestaticIPAddressm_GroupAddress;privateboolisExit=false;privateboolisShow=true;privateboolm_bFlag;NotifyIconmyNotifyIcon;//委托类delegatedelegatevoidAppendStringCallback(stringtext);AppendStringCallbackappendStringCallback;privatestaticUdpClientudpClient;privatedelegatevoidSetComboBoxCallback(stringstr);SetComboBoxCallbackset_combobox_callback;publicchat(){InitializeComponent();appendStringCallback=newAppendStringCallback(AppendString);set_combobox_callback=newSetComboBoxCallback(SetComboBox);m_GroupAddress=IPAddress.Parse(groupIPaddress.Text);try{m_Icon1=newIcon(20005.ico);//导入图标文件m_Icon2=newIcon(20060.ico);}catch(Exceptione){MessageBox.Show(Error+e.Message,AnimateTray-Error);}m_bFlag=true;}#regionconnect_and_stopprivatevoidbtnChat_Click(objectsender,EventArgse){ThreadreceiveThread=newThread(newThreadStart(ReceiveData));//将线程设为后台运行receiveThread.IsBackground=true;receiveThread.Start();btnChat.Enabled=false;btnStop.Enabled=true;txbSend.Enabled=true;13}privatevoidbtnStop_Click(objectsender,EventArgse){//必须使用组播的地址范围内的地址Terminate();stringHostName=Dns.GetHostName();IPHostEntryMyEntry=Dns.GetHostByName(Dns.GetHostName());IPAddressMyAddress=newIPAddress(MyEntry.AddressList[0].Address);stringaddress=MyAddress.ToString();RemComboBox(address);udpClient.Close();btnChat.Enabled=true;btnStop.Enabled=false;txbSend.Enabled=false;}#endregion#regionReceive_eventsprivatevoidReceiveData(){IsValidPort(txtPort.Text);try{//使用的接收端口号intport=int.Parse(txtPort.Text);udpClient=newUdpClient(port);//必须使用组播的地址范围内的地址IPAddressgroupIP=IPAddress.Parse(groupIPaddress.Text);//50为生存时间,超时被丢弃udpClient.JoinMulticastGroup(groupIP,50);}catch{}IPEndPointremote=null;//接收从远程主机发送过来的信息while(true){try{//关闭udpClient时此句会产生异常byte[]bytes=udpClient.Receive(refremote);stringaddress=remote.ToString();14intatIndex=address.IndexOf(:);stringmemberaddress=address.Substring(0,atIndex);//执行委托cbxChoose.Invoke(set_combobox_callback,memberaddress);stringstr=Encoding.UTF8.GetString(bytes,0,bytes.Length);AppendString(string.Format(来自{0}:{1},address,str));}catch{//退出循环,结束线程break;}}}#endregion#regionSend_eventsprivatevoidsend(stringIPadd,stringPort){UdpClientmyUdpClient=newUdpClient();try{IPAddressadd=IPAddress.Parse(IPadd);intport=int.Parse(Port);IPEndPointiep=newIPEndPoint(add,port);intretry=0;while(true){try{//将发送内容转换为字节数组byte[]bytes=Encoding.UTF8.GetBytes(txbSend.Text);//向子网发送信息myUdpClient.Send(bytes,bytes.Length,iep);AppendString(string.Format(发给{0}:{1},iep,txbSend.Text));txbSend.Clear();txbSend.Focus();break;}catch{if(retry3){15retry++;continue;}else{MessageBox.Show(发送失败!);}}finall

1 / 22
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功