资源预览内容
第1页 / 共30页
第2页 / 共30页
第3页 / 共30页
第4页 / 共30页
第5页 / 共30页
第6页 / 共30页
第7页 / 共30页
第8页 / 共30页
第9页 / 共30页
第10页 / 共30页
亲,该文档总共30页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
华南农业大学理学院( 计算机网络 )课程设计实验时间: 2021学年第二学期 专业年级: 2021级应数2班 实验题目: 基于TCP/IP协议的网络通信应用程序 学生姓名:王晓珊学号 _18_自评成绩_95教师评成绩_学生姓名:黄如萍_学号 06_自评成绩_95_教师评成绩_学生姓名_学号 _自评成绩_教师评成绩_学生姓名_学号 _自评成绩_教师评成绩_指导老师: 黄小虎 基于TCP/IP协议的网络通信小应用程序1. 课程设计的题目及要求1.1 课程设计题目掌握基于TCP/IP协议实现网络通信,理解TCP与UDP的不同特性以及实现方式。课程设计要求建立一个基于TCP/IP协议的网络通信小应用程序,实验可采用UDP或TCP,建议基于WINDOWS平台。1.1.1 功能要求建立一个基于中心效劳器方式即时数据通信平台IM。要求如下(*为选做内容): 1. 能进行用户管理,所有用户必须登录到效劳器,由效劳器维护在线信息。 2. IMInstant Message功能:用户登录后能进行实时多方点到点短信息通信,如聊天; 3. 能选择要求效劳器进行转发效劳; 4. 能保存通信记录到数据库SQL Server或其他桌面型数据库; 5. 能进行双方文件传输,能显示进度; 6. 支持断点重传。检查时需有功能随时中断传送,并在下次启动能显示重传状态; *7. 数据包加密;8.实时语音双向传送功能;*9.多方通话功能;10.界面设计要求布局合理,信息清晰。1.1.2 对于所有功能的要求1) 要求清晰描述所设计的应答机制,数据包格式,所用数据结构及其相应算法,机密机制等;2) 对于功能实现要求描绘实现方法,流程。2. 开发工具、软硬件环境简介2.1 开发工具开发工具:Microsoft Visual Studio 20212.2 软硬件环境2.2.1 软件环境l 操作系统:Windows XP/Windows 7l 开发软件:Microsoft Visual Studio 2021l 开发语言:C#语言l 平台:Microsoft.NET Framework v2.02.2.2 硬件环境l 分辨率:1000750l 效劳器: PentiumIII 500以上或更高;内存:128M以上;硬盘:至少40G以上; l 工作站: PentiumII 266以上微机;内存:64MB硬盘: 至少5G以上; 3. 程序实现的根本思想3.1 程序设计分析本设计实现的基于TCP/IP协议的网络通信小应用程序,实际上是一个基于Socket的聊天室。聊天室主要由聊天室效劳器和聊天室客户端组成。聊天室效劳器负责管理和客户端连接并发送消息给客户端;聊天室客户端负责接收或者发送聊天消息,登录聊天室效劳器等。一个聊天室效劳器应该支持多个聊天室客户端进行同时连接。聊天室效劳器和聊天室客户端之间根据聊天协议进行通信。3.2 根本思想程序的实现主要分为两大局部,即效劳器局部和客户端局部。程序首先设计聊天室的效劳器,再设计客户端局部,最后生成可执行文件。1 效劳器效劳器端管理着聊天任务,它维持着一张当前在线用户的列表,转发用户发送来的消息。设计思想如下:3) 利用控件设计窗体;4) 功能实现; 监听本机IP地址中的一个指定的端口; 当有客户端向该端口发出请求时,效劳器程序立刻建立一个与该客户端的连接并启动一个新的线程来处理该客户端; 根据客户端发送来的各种不同的请求,执行相应的操作,并将结果返回给客户端。5) 运行调试。2 客户端客户端应用程序包含用户登录窗口和用户聊天的主窗口,它允许用户登录到效劳器,可以向效劳器发送消息,同时可以接收从效劳器返回的信息。1) 设计登录窗体和聊天窗体;2) 基于课程设计的要求实现各窗体对应的功能; 向效劳器发送连接请求; 得到效劳器程序确实认后,建立与效劳器的连接,并获得与效劳器交互的流通道; 通过网络流通道与效劳器端的程序进行数据通信。3) 运行调试。4. 系统功能框架图、系统流程图4.1 功能框架图图1 功能框架图4.2 系统流程图图2系统流程图5. 具体实现过程5.1 设计准备5.1.1 TCP的运用客户端只能和效劳器通信,无法和另外一个客户端直接通信。为了使两个客户端能相互通信,所有的客户一律先把聊天信息发给效劳器,并告诉效劳器改信息是发送给哪个客户的,效劳器收到信息后,再将该信息转发给另外一个客户。本设计的实现主要用了TcpListener类用于用于侦听和接受传入的连接请求。根本方法:表1 TCP连接根本方法TcpListener类根本方法作用Start启动监听Stop关闭TcpListener并停止监听请求AcceptSocket在同步阻塞方式下获取并返回一个用来接收和发送数据的Socket对象,同时从传入的连接队列中移除该客户端的连接请求5.1.2 Socket套接字的运用本设计中自定义了通信程序的可识别命令见以下第三小点,即自定义的简单协议。故程序中为支持自定义的协议,采用套接字来实现。根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为效劳器监听,客户端请求,连接确认三个步骤。n 效劳器监听:效劳器套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。n 客户端请求:由客户端的套接字提出连接请求,要连接的目标是效劳器的套接字。为此,客户端的套接字必须首先描述它要连接的效劳器的套接字,指出效劳器套接字的地址和端口号,然后再向效劳器套接字提出连接请求。n 连接确认:当效劳器套接字监听到客户端套接字的连接请求时,它就响应客户端套接字的请求,把效劳器套接字的信息发给客户端,一旦客户端确认了此信息,连接即可建立。而效劳器套接字继续监听其他客户端套接字的连接请求。效劳器和客户端必须分别进行编程,它们之间的连接如下列图所示。 图3 效劳器与客户端的连接图5.1.3 通信程序中可识别命令的定义程序中定义的可识别命令格式为两个一位整数拼接成的字符串,每位的含义如下: 第一位 第一位为0:客户机向效劳器发送的命令 第一位为1:效劳器向客户机发送的命令 01-离线 02-请求在线列表 可以识别的命令格式 03-请求对所有人闪屏振动第二位 效劳端 04-请求对指定用户闪屏振动 05-请求播送消息 06-请求对指定用户发送文件要求转发给指定用户的用户名 :转发给指定用户 11-效劳器要求客户机更新在线列表 客户端 12-效劳器要求客户机做闪屏振动 default-接受用户消息或者系统消息的正文6. 效劳器具体设计6.1.1 窗体设计新建一个Windows窗体,命名为Form1.cs,主要用于连接效劳器。只有建立了聊天室效劳器,客户才能连接到上面,从而进行聊天。效劳器建立之后,一般处于监听状态,等待客户机的连接申请。窗体用到的主要控件如下表所示。表2 主要控件控件类型控件名字用途按钮两个按钮,分别用于连接效劳器和退出连接标签两个标签,一个为“端口号,另一个为显示“默认端口号文本框两个文本框,一个用于用户输入端口号,另一个用于显示效劳器连接等系统消息图4 窗体设计图6.1.2 编码1) 创立效劳器这局部程序的编写主要是实现“获得有效的端口号和IP地址,设计要点:l 自动获取IP地址IPAddress _ip = new System.Net.IPAddress(Dns.GetHostByName(Dns.GetHostName().AddressList0.Address);l 可以自主选择是否输入端口号端口号是进程的标识,端口号范围从0到65535。由于1000以内的端口大多被标准协议占用,所以程序中可以自由使用的端口号一般都用大于1000的值。假设输入端口号,程序设置了有效端口号的范围为1023与65535之间。假设端口有效那么连接效劳器,并提示相应的信息;默认端口号设置为8888假设没有输入端口号,或者端口号无效,那么程序自动使用默认端口号连接效劳器。代码如下:private void button1_Click(object sender, EventArgs e) this.button1.Enabled = false; string portParam; portParam = textBox_port.Text; if (portParam != string.Empty) if (!int.TryParse(portParam, out _port) | _port 65535) _port = 8888; textBox1 .AppendText (端口号不合法,默认端口号被接受!); textBox1 .AppendText (效劳器已启动,正在监听.n); textBox1 .AppendText (string.Format(效劳器IP:0t端口号:1n, _ip, _port); _tcpl =new TcpListener (_ip, _port); _tcpl.Start(); trd = new Thread(new ThreadStart(this.ThreadTask); trd.Start(); 2) 线程监听和执行由效劳器和客户端的聊天室模型可以看出,效劳器跟客户端的连接以及客户端之间的连接都是通过执行流实现的,即每一个独立的执行流都是一个线程。编写线程监听和线程执行体监听来自多个客户端的请求。l 线程监听在创立效劳器代码中,可以看到假设输入端口号有效,那么执行TcpListener类侦听和接受传入的连接请求,并开启线程调用ThreadTask方法。ThreadT
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号