已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络编程计算机网络编程 综合程序设计项目综合程序设计项目 基于基于 UDPUDP 协议的网络聊天程序设计协议的网络聊天程序设计 院院 系系 部部 信 息 工 程 学 院 姓姓 名 名 班班 级 级 指指导导教教师师签签名名 2011 年 4 月 16 日 北京 1 目 录 1 需求分析 2 1 1 课程设计目的 2 1 2 课程设计内容 2 1 3 课程设计要求 2 2 概要设计 2 2 1 原理概述 2 2 2 功能模块调用流程设计 3 3 详细设计 4 3 1 流程图 4 3 2 运行效果图 5 3 3 主要源代码 12 4 项目分析与总结 17 4 1 遇到的问题和解决方法 17 4 2 心得体会 18 2 1 1 需求分析需求分析 1 1 课程设计目的 开发一个专用于实现两台计算机之间即时通讯的软件 以方便两台计算机之间信息的 交流 在连接并通信时 尤其是近程的即时通讯 彻底的脱离了远程的服务器 避免了和 远程服务器连接时过多的浪费网络资源 并且避免了服务器忙或与服务器无法连接时 浪 费过多时间用于和服务器建立连接 因此 这个软件是极具适应性和实用性的即时通讯软 件 本次课程设计的目的是学习基于 UDP 协议实现网络聊天程序 已达到学会面向无连接 方式的程序设计方法 并理解网络编程中面向无连接的概念 1 2 课程设计的内容 用户数据报 UDP 是一个无连接协议 使用这种协议时 并不需要在两台计算机之间 建立固定的连接 也就是说 通信双方没有服务器和客户机之分 它们之间进行的是对等 通信 所以它的优势很明显 是现代通信不可或缺的一部分 所以 利用它的优势设计一 个可以实现私聊和群聊的软件 实现两台计算机间的即时通讯 1 3 课程设计要求 基于 UDP 协议实现一对一的聊天和一对多的聊天 提供友好的用户界面 便于用户进 行操作 根据目前使用聊天程序的用户需求显示 用户对于聊天程序主要有以下几点要求 1 聊天功能 可以实现实时接收和发送文字信息 并能支持公聊和私聊的方式 2 用户功能 可以查看对方的开放信息 以及发送方的 IP 2 2 概要设计概要设计 2 1 原理概述 采用 UDP 协议 通过服务器中转方式 因此 现在的 IP 侦探在你仅仅跟对方发送聊天 消息的时候是无法获取到 IP 的 UDP 协议是不可靠协议 它只管发送 不管对方是否收到 但它的传输很高效 因为 UDP 协议排除了信息可靠传递机制 将安全和排序等功能移交给 上层应用来完成 极大降低了执行时间 使速度得到了保证 例如 腾讯采用了上层协议 来保证可靠传输 如果客户端使用 UDP 协议发出消息后 服务器收到该包 需要使用 UDP 协议发回一个应答包 如此来保证消息可以无遗漏传输 3 2 2 功能模块调用流程设计 Socket Bind Close 服务器客户端 Socket Close ReceiveFrom SendTo Shutdown Bind ReceiveFrom SendTo Shutdown 双双向向 通通信信 4 3 3 详细设计详细设计 3 1 流程图 输入组播地址及段口号 开始 初始化各个控件 不可发送消息 点击 开始聊天 按钮 进行群聊 判断是否进行群聊判断是否进行私聊 输入 IP 地址及段口号 点击 开始聊天 按钮 进行私聊 选择在线的私聊对象 输入发送信息 点击 发送 按钮 在 接收发信息 框 中显示聊天记录 在 接收发信息 框 中接收信息 点击 清屏 按钮 在 接收发信息 框 中清除聊天记录 点击 断开 按钮 断开连接 不可发送信息 点击 退出 按钮 结束 N Y Y Y Y Y Y Y 退出程序 N N N N N 5 3 2 界面设计与运行效果图 界面设计 测试程序 初始化界面 组播地址为 224 100 0 1 端口号为 6553 6 测试程序 点击开始聊天 组播地址为 224 100 0 1 端口号为 6553 开始群聊 测试程序 界面显示群聊接收发消息 7 测试程序 选择在线的私聊对象 8 测试程序 输入对方 IP 地址 进行固定的私聊 9 测试程序 不正确的情况 端口号为空时 测试程序 不正确的情况 超出端口号范围时 10 测试程序 不正确的情况 端口号不合法时 测试程序 以上情况均不能正确发送信息 11 测试程序 不正确的情况 组播地址非法时 测试程序 不正确的情况 发送的输入信息为空 12 测试程序 点击清屏按钮接收发消息框清空 电脑桌面程序栏中托盘图标 13 3 3 主要源代码 namespace chat public partial class chat Form private static IPAddress m GroupAddress private bool isExit false private bool isShow true private bool m bFlag NotifyIcon myNotifyIcon 委托类delegate delegate void AppendStringCallback string text AppendStringCallback appendStringCallback private static UdpClient udpClient private delegate void SetComboBoxCallback string str SetComboBoxCallback set combobox callback public chat InitializeComponent appendStringCallback new AppendStringCallback AppendString set combobox callback new SetComboBoxCallback SetComboBox m GroupAddress IPAddress Parse groupIPaddress Text try m Icon1 new Icon 20005 ico 导入图标文件 m Icon2 new Icon 20060 ico catch Exception e MessageBox Show Error e Message Animate Tray Error m bFlag true region connect and stop private void btnChat Click object sender EventArgs e Thread receiveThread new Thread new ThreadStart ReceiveData 将线程设为后台运行 receiveThread IsBackground true receiveThread Start btnChat Enabled false btnStop Enabled true txbSend Enabled true 14 private void btnStop Click object sender EventArgs e 必须使用组播的地址范围内的地址 Terminate string HostName Dns GetHostName IPHostEntry MyEntry Dns GetHostByName Dns GetHostName IPAddress MyAddress new IPAddress MyEntry AddressList 0 Address string address MyAddress ToString RemComboBox address udpClient Close btnChat Enabled true btnStop Enabled false txbSend Enabled false endregion region Receive events private void ReceiveData IsValidPort txtPort Text try 使用的接收端口号 int port int Parse txtPort Text udpClient new UdpClient port 必须使用组播的地址范围内的地址 IPAddress groupIP IPAddress Parse groupIPaddress Text 50为生存时间 超时被丢弃 udpClient JoinMulticastGroup groupIP 50 catch IPEndPoint remote null 接收从远程主机发送过来的信息 while true try 关闭udpClient时此句会产生异常 byte bytes udpClient Receive ref remote string address remote ToString 15 int atIndex address IndexOf string memberaddress address Substring 0 atIndex 执行委托 cbxChoose Invoke set combobox callback memberaddress string str Encoding UTF8 GetString bytes 0 bytes Length AppendString string Format 来自 0 1 address str catch 退出循环 结束线程 break endregion region Send events private void send string IPadd string Port UdpClient myUdpClient new UdpClient try IPAddress add IPAddress Parse IPadd int port int Parse Port IPEndPoint iep new IPEndPoint add port int retry 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 retry 3 16 retry continue else MessageBox Show 发送失败 finally myUdpClient Close catch private void btnSend Click object sender EventArgs e 检测发送框的信息是不是为空 if txbSend Text MessageBox Show 发送信息不能为空 return IsValidPort txtPort Text UdpClient myUdpClient new UdpClient int index cbxChoose SelectedIndex 组播 if txtIPaddree Text try IPAddress add IPAddress Parse groupIPaddress Text int port Convert ToInt32 txtPort Text IPEndPoint iep new IPEndPoint add port 将发送内容转换为字节数组 byte bytes Encoding UTF8 GetBytes txbSend Text 向子网发送信息 myUdpClient Send bytes bytes Length iep txbSend Clear 17 txbSend Focus catch MessageBox Show 发送失败 finally myUdpClient Close else if index 0 index 1 IsValidIP txtIPaddree Text send txtIPaddree Text txtPort Text else send cbxChoose Text txtPort Text endregion region IsValid field public void Terminate udpClient DropMulticastGroup m GroupAddress 检测输入对方IP有没有效 private void IsValidIP string str IPAddress ip if IPAddress TryParse str out ip MessageBox Show 非法IP地址 return 检测端口号有没有效 private void IsValidPort string str int isPort if txtPort Text 18 MessageBox Show 端口号不能为空 return else if int TryParse str out isPort MessageBox Show 端口号无效 return else if isPort 65335 MessageBox Show 端口号应该大于或等于1024 小于或等于65535 return endregion region tray field private void chat Load object sender EventArgs e btnChat Enabled true btnStop Enabled false txbSend Enabled false cbxChoose SelectedIndex 1 在当前窗体的容器中创建托盘图标NotifyIcon的实例 myNotifyIcon new NotifyIcon ponents 指定托盘图标 myNotifyIcon Icon new Icon 1644 ico 鼠标悬停在托盘图标上方时显示的内容 myNotifyIcon Text 我的聊天器 设置关联的上下文菜单 myNotifyIcon ContextMenuStrip this contextMenuStrip1 显示托盘图标 myNotifyIcon Visible true 添加用户双击任务栏中的托盘图标时触发的事件 myNotifyIcon DoubleClick new EventHandler myNotifyIcon DoubleClick void myNotifyIcon DoubleClick object sender EventArgs e if isShow this Hide isShow false 19 else this Show isShow true private void chat FormClosing object sender FormClosingEventArgs e if isExit false 取消关闭窗体事件 e Cancel true 隐藏窗体 this Hide else udpClient Close private void 显示窗口toolStripMenuItem1 Click object sender EventArgs e this Show private void 退出程序toolStripMenuItem2 Click object sender EventArgs e isExit true Application Exit private void notifyIcon1 MouseDoubleClick object sender MouseEventArgs e if isShow this Hide isShow false else this Show isShow true 20 private Icon m Icon1 private Icon m Icon2 private void 打开计时器ToolStripMenuItem Click object sender EventArgs e tmIcon Start private void 停止计时器ToolStripMenuItem Click object sender EventArgs e tmIcon Stop private void tmIcon Tick object sender EventArgs e if m Icon1 null m bFlag false else notifyIcon1 Icon m Icon1 m bFlag true endregion region control delegate method private void AppendString string text if rtbMessage InvokeRequired rtbMessage Invoke appendStringCallback text else rtbMessage AppendText text r n 21 private void SetComboBox string str 去除掉cbxChoose控件选项的重复内容 cbxChoose Items Add str for int i 0 i this cbxChoose Items Count i for int j 0 j this cbxChoose Items Count j if i j if this cbxChoose Items i ToString this cbxChoose Items j ToString this cbxChoose Items Remove this cbxChoose Items j 删除combobox里的地址 private void RemComboBox string str for int i 0 i this cbxChoose Items Count i if this cbxChoose Items i ToString str ToString this cbxChoose Items Remove str ToString endregion private void btnClear Click object sender EventArgs e rtbMessage Clear private void btnExit Click object sender
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年鹰潭辅警招聘考试真题及答案详解一套
- 2025年眉山辅警协警招聘考试真题及答案详解(历年真题)
- 2025年长春辅警协警招聘考试备考题库含答案详解(夺分金卷)
- 2025年湘潭辅警招聘考试题库附答案详解(考试直接用)
- 2025年鹰潭辅警招聘考试题库及答案详解(网校专用)
- 2025年黔西南州辅警协警招聘考试真题及答案详解(夺冠)
- 2025年苏州辅警协警招聘考试真题含答案详解(精练)
- 2025年甘南州辅警协警招聘考试备考题库及答案详解(名师系列)
- 2025年铜川辅警招聘考试真题附答案详解(典型题)
- 2025年运城辅警招聘考试题库含答案详解(预热题)
- 《爱的教育》读书分享
- 一年级上语文上册课外阅读教案
- T/CSPSTC 13-2018禽类产品追溯体系应用指南
- 产品数字护照(DPP)技术发展报告(2025年)
- 公安局退款协议书
- 幼儿园大班社会《我去过的地方》
- 湖南单招试题及答案数学
- 食品行业食品安全追溯与溯源系统设计方案
- 胸腔积液护理疑难病例讨论
- 第31 届 WMO 融合创新讨论大会小学四年级初测试卷
- 西北工业大学《电路与模拟电子学》2023-2024学年第二学期期末试卷
评论
0/150
提交评论