《网络课程设计报告》由会员分享,可在线阅读,更多相关《网络课程设计报告(16页珍藏版)》请在金锄头文库上搜索。
1、计算机网络课程设计-基于TCP的点对点即时通信工具姓名:杨祺鹏For personal use only in study and research; not for commercialuse班级:191072学号: 566指导老师:梁庆中For personal use only in study and research; not for commercialuse一 设计题目及设计目标1. 设计题目For personal use only in study and research; not for commercial use题目:实现一个基于网络的应用要求:利用TCP或UDP完成
2、联网通信,并在此基础上完成数 据应用。2. 设计目标 这个软件实现的功能主要包括局域网内的点对点聊天(基本 功能),局域网内搜索IP并显示,搜索任意IP段并显示。应 用的主要范围面向局域网。二 设计的思路1. 选用语言: C#2. 使用的主要技术: TcpClient,thread(线程)3. 功能结构图。程序流程图:关闭连 接,关闭 数据流1. 获取本机IP模块使用的 C#的 IPHOSTENTRY口 IPADDRES两个类string hostnamel = DnsGetHostName();IPHostEntry myentry = Dns.GetHostByName(hostname1
3、);IPAddress myaddress = new IPAddress (myentry.AddressListO.Address); string myip = myaddress.ToString();=myip;用已经获取的本机的名字来获取本机的IP。2. 获取局域网IPint ipdot = myip.LastlndexOf( .);myip = myip.Substring(0,ipdot+1);string aa =0;/获取本机的IP后,获取最后一个.的位置,并且将这个.后面的数据替换成0和255,实现从局域网0-255的搜索string bb =255;string sta
4、rtip = myip + aa;string endip = myip + bb;=startip;=endip;3. 搜索指定IP段的IP地址对输入的IP段进行搜索,string ipcur =;int ipdot = ipcur.LastlndexOf( .);string ippre = ipcur.Substring(0,ipdot+1);(int i = 0; i = 3;i+ )for在这里 定义搜 索多少 次,因为 搜索很 慢,所以 暂时只 搜索3 次就停 下了 MessageBoxShow(”开始搜索”);string scanip = ippre + i.ToString(
5、);IPAddress myscanip = IPAddress .Parse(scanip); IPHostEntry myscanhost = null ;获取输入IP的最 后一个点的位 置,并且先设置 一个变量为要添 加到这个点后面 的数据。trycanhost =catchifcontinue ;要搜索的IP是搜索框内的IP去 尾得到的,在这里添加上IP的尾 端进行搜索。DnsGetHostByAddress(myscanip);判断是否可以搜索此(myscanhost.HostName != null )MessageBoxShow(”搜索到一个结果”); 可用 IP :);此IP的
6、主机名:);运行截图:IP如果可以通过 IP 搜索到该ip的名 字,则进行添加。4. 在程序启动时同时启动另一个线程作为服务器C/S模式都有服务器和客户端之分,在这个程序中服务器端被简化 了,服务器程序不具有主动的功能,只能对端口进行监听并且修改主进程的控件private void Form1_Load( object sender, EventArgs e)Control .CheckForlllegalCrossThreadCalls =Thread server = new Thread (new ThreadStart server.IsBackground =true ;server
7、.Start();false ;(serverfuntion);在主进程就启动另外 一个服务器 线程privatevoid serverfuntion()dt =DateTime dt = new DateTime(); DateTime.Now;获取当前时间以显示连接成功的时间if ( != null )TcpListener mylis =new TcpListener (IPAddress .Any, 51888);I I7对之前的while(true )tcpli nste ne不得进于商业接受的连接。对任意IP的指定端口进 行监听,无限循环的。TcpCIient mytcp = ne
8、w TcpCIient ();mytcp = myIis.AcceptTcpCIient();/ MessageBox.Show(” 连接建立成功!);Networkstream mystream = mytcp.GetStream();StreamReader sr = new StreamReader (mystream); / MessageBox.Show(” 流建立连接指向IP的51888 端口,连接不成功会 显示不成功。连接成功后对txtbox进 行数据添 加,并且将 发送信息键 置成可使用 的。5. 连接指定IP地址,并且进行数据传输连接指定IPprivate void butt
9、on2_Click( object sender, EventArgs e) IPAddress myip = IPAddress .Parse(;IPAddress toip = IPAddress .Parse(;TcpClient mytcp = new TcpClient ();trymytcp.Connect(toip, 51888);catch ( SocketException )MessageBoxShow(”该 IP不存在! ”);正在连接IP:);if (mytcp.Connected = true )连接成功!”);=true ;mytcp.Close();else连接失
10、败!false ;运行截图:数据传输private void send_Click( object sender, EventArgs e)DateTime dt = new DateTime();dt =DateTime.Now;IPAddressIPAddressmyip = toip =IPAddress .Parse(;IPAddress .Parse(;TcpClientmytcp =因mytctcpclie nt 能获 连接 时间 ip,所 在发 的时 把本 ip myst送候地new TcpClient ();*/MessageBox.Show(” 连接建立!);/数据流建立p.
11、Connect(toip,51888);NetworkStream mystream = mytcp.GetStream();因为发送 信息键是 在连接成 功后才可 用的,因此 不存在连 接失败的 可能。stringstringstringstringmessage1 =;message2 =;message3 = message1 + 本条消息来自于: + message2;message4 =你悄悄的对+ +说:+ message1;发送数据要用特殊格式。byte sendmessage1 =;-eam.Write(sendmessage1,0,sendmessage1.Length);名
12、字,连 不得用于商业用途 发送出去。关闭数据流,关闭连 接。mystream.Close();/ 关闭数据流mytcp.Close();/ 关闭连接;/MessageBox.Show(” 消息发送成功!);运行截图:四.课程设计过程总结1. 程序总结程序实现的功能比较简单,只有搜索IP和点对点聊天,其中搜索IP速度很慢,大概要用3秒左右才能搜索一个IP,暂时还没有解 决这个问题,总体上达到了课程设计的目标,要求的功能基本都 实现了。在后续的功能增强中,会逐步添加群聊还有添加好友的 功能,登录界面也要用数据库进行管理,依靠每个人的数据库数 据有不同的登录界面和好友。2. 遇到的问题和解决过程遇到
13、的问题主要是两个,一个是C/S模式都是要一个客户端一个服务 端,如何让他们在一个程序中实现;一个是对 TCPCLIEN的使用不太 熟悉,之前没有用到过。对于TCPCLIEN的学习是自己找资料还有在 网上看实例学会的,当时和 SOCKET!点弄混了,所以在刚开始的时 候出了点小问题, 随着对 tcpclient 的理解的加深问题就解决了。 另外 一个问题是用线程来解决的,这个方法是参考了网上的高手给的办 法,但是用线程是不能更改主线程的控件的, 还要加上一句类似声明 的代码,这一句代码看似简单, 实际上我找到代码并且测试成功用了 将近一个小时的时间。在发现问题,解决问题的过程中,我的知识储 备也是愈加的丰富, 在和同学们的交流中也学习到了很多知识和很多 很好的想法。在这里对 191072班的刘锦权同学提出特别感谢, 他教给我线程和 事件的使用方法。3. 课程设计感想 通过几天紧张有序的忙碌, 网络课程设计程序终于出炉了。 基于我们 之前对TCP的学习和理解,加上在自己买的资料中进行学习, 在程序 中应用TCP连接还是不太难的。TCP强大的功能和使之实现的简洁的 代码给我留下了很深刻的印