ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:76.98KB ,
资源ID:28783969      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28783969.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机网络原理课程设计.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机网络原理课程设计.docx

1、计算机网络原理课程设计网络原理课程设计 -网络聊天室的设计与实现 专业班级:*姓名:* 学号:*一. 设计目的通过本实验,掌握网络协议数据包捕获和解析编程的技术/网络程序的设计方法二设计内容网络聊天室的设计与实现三.实验环境在Microsoft visual studio2005基于c#技术的开发。四.设计思想C#是一种面向对象的程序设计语言,它的基本语法与C/C+相同,其将软件开发中的逻辑分成5大部分:商业外观层(BusinessFacade),商业规则层(BusinessRules),数据访问层(DataAccess),Model层等。这种逻辑上的划分使得软件的开发更加方便,并使语句和数据

2、库的访问分开,而由商业规则层单独提出规则,便于软件的扩展和维护。TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输层服务,而IP则是提供网络层服务。TCP/IP主要包括以下协议:IP:网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。ICMP:网间报文控制协议(Internet Control Message Protocol)此协议处理网关和主机的差错和传送控制。TCP: 传输控制协议(Transmission Control Protocol)这是

3、一种提供给用户进程的可靠的全双工字节流面向连接的协议。它要为用户进程提供虚电路服务,并为数据可靠传输建立检查。TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物基于以上思想完成此次课程设计网络-网络聊天室的设计与实现五.实现流程1.设计服务器端连接用户模块设计:通过GetIp()函数获得客户端IP,然后开放一个端口,绑定并监听端口。接受来自客户端的连接,并向客户端发送欢迎信息。与客户端建立连接。2.设计客户端客户端计算机获取本机开放的socket端口23,再发送目标主机的IP,通过connection()函数与服务端建立连接,如果connection()作用结果出

4、现错误的socket,则连接失败,否则通过recv()函数接收服务器发送的字符串,即为服务器发送的欢迎信息。六.源代码using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Net;using System.Net.Sockets;using System.Threading;

5、namespace ChatApp public partial class Form1 : Form public Form1() InitializeComponent(); skinEngine1.SkinFile = MSN.ssk; skinEngine1.Active = true; /全局变量 private Socket mySocket;/通信套接字 private Socket myReadSocket;/读取或地送消息的套接字 private Thread myThread;/异步启动的线程 private Thread myReadThread;/读信息的线程 priv

6、ate IPAddress myIP;/IP地址 private int myPort;/端口号 / List client_S = new List ; / /服务端 #region 服务器 public void Server() try myIP = IPAddress.Parse(txtIP.Text.Trim();/获得IP地址 myPort = Convert.ToInt16(txtPort.Text.Trim();/端口号 IPEndPoint myServer = new IPEndPoint(myIP, myPort); mySocket = new Socket(Addre

7、ssFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); mySocket.Bind(myServer); mySocket.Listen(50); lbServer.Text = 监听中.; myThread = new Thread(new ThreadStart(Listen); myThread.Start(); catch (Exception w) MessageBox.Show(w.Message); rbtnServer.Checked = false; private void Listen() while (t

8、rue) try myReadSocket = mySocket.Accept(); client_S.Add(myReadSocket); if (myReadSocket.Connected) lbServer.Text = 连接状态.; myReadThread = new Thread(new ThreadStart(Read); myReadThread.Start(); catch (SocketException se) MessageBox.Show(se.Message); / / 当是服务器时读取消息的方法 / private void Read() while (true

9、) try byte readtxt = new byte64; myReadSocket.Receive(readtxt, readtxt.Length, 0); /转发 for (int i = 0; i client_S.Count; i+) try client_Si.Send(readtxt); catch (SocketException) client_S.Remove(client_Si); string msg = System.Text.Encoding.BigEndianUnicode.GetString(readtxt); this.rtbContent.AppendT

10、ext(msg.Trim(); ; catch (Exception ee) MessageBox.Show(ee.Message); #endregion private void rbtnServer_CheckedChanged(object sender, EventArgs e) /开启服务 if (rbtnServer.Checked) init(); Server(); private void txtMessage_KeyDown(object sender, KeyEventArgs e) /按Enter发送 if (Keys.Enter = (Keys)e.KeyCode)

11、 this.SendMessage(); private void txtMessage_KeyUp(object sender, KeyEventArgs e) if (Keys.Enter = (Keys)e.KeyCode) txtMessage.Text = ; #region 客户端 public void Client() try myIP = IPAddress.Parse(txtIP.Text.Trim();/获得IP地址 myPort = Convert.ToInt16(txtPort.Text.Trim();/端口号 IPEndPoint desServer = new I

12、PEndPoint(myIP, myPort); mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); mySocket.Connect(desServer); try lbClient.Text = 连接成功.; myReadThread = new Thread(new ThreadStart(ReadFromServer); myReadThread.Start(); catch (Exception ee) lbClient.Text = 连接失败.; Messag

13、eBox.Show(ee.Message); catch (Exception w) MessageBox.Show(w.Message); rbtnClient.Checked = false; / / 读取服务器消息 / private void ReadFromServer() while (true) byte by = new byte64; mySocket.Receive(by); string text = System.Text.Encoding.BigEndianUnicode.GetString(by).Trim(); rtbContent.AppendText(text

14、); #endregion private void rbtnClient_CheckedChanged(object sender, EventArgs e) if (rbtnClient.Checked) init(); Client(); / / 当从服务器切换到客户机时需要从新初始化对像实例 / 调用的方法 / private void init() if (myThread != null) myThread.Abort(); if (myReadThread != null) myReadThread.Abort(); lbClient.Text = -; lbServer.Tex

15、t = -; if (mySocket != null) mySocket.Close(); mySocket.Dispose(); if (myReadSocket != null) myReadSocket.Close(); myReadSocket.Dispose(); / / 自定义发送消息方法 / private void SendMessage() if (txtMessage.Text.Length 0) if (rbtnServer.Checked) string message = txtMessage.Text; message = 【 + DateTime.Now.ToS

16、tring() + 】+Dns.GetHostName().ToString()+:n + message+n; byte b = System.Text.Encoding.BigEndianUnicode.GetBytes(message); /myReadSocket.Send(b); for (int i = 0; i client_S.Count; i+) try client_Si.Send(b); catch (SocketException) client_S.Remove(client_Si); rtbContent.AppendText(message); txtMessag

17、e.Clear(); if (rbtnClient.Checked) string message = txtMessage.Text; message =【 + DateTime.Now.ToString() + 】 + Dns.GetHostName().ToString() + :n + message+n; byte b = System.Text.Encoding.BigEndianUnicode.GetBytes(message); mySocket.Send(b); / rtbContent.AppendText(message); txtMessage.Clear(); els

18、e MessageBox.Show(发送消息不能为空!, -_-, MessageBoxButtons.OK, MessageBoxIcon.Exclamation); txtMessage.Clear(); private void btnSend_Click(object sender, EventArgs e) /点击了发送的按钮 this.SendMessage(); private void rtbContent_TextChanged(object sender, EventArgs e) /自动显示最后一条数据 this.rtbContent.ScrollToCaret(); p

19、rivate void Form1_FormClosed(object sender, FormClosedEventArgs e) if (mySocket != null) mySocket.Close(); mySocket.Dispose(); if (myReadSocket != null) mySocket.Close(); mySocket.Dispose(); 七.实验结果1.先指定服务端的IP及其端口2.指定客户端的IP及端口3客户端向服务端发送消息并且客户端回应八.心得体会通过本次课题设计,无论从专业理论知识还是动手实践经验我都得到了很多锻炼,并具有较大的提高。在动手作课程设计之前,总觉得不会太难做到,可是真正动手做的时候才发现实际上我们还存在很多的不足之处。可以在做设计的同时,我们也在不断的学习和提高。切实的锻炼了动手动脑的能力。在实际开发中,熟悉了许多开发工具的使用,对Microsoft visual studio2005 的开发环境有了更深刻的认识,对TCP/IP也有了更加深入的了解,在这个过程中对使用得开发语言C#有了更好的学习。由于水平有限,时间紧促,本系统的开发和系统的优化技术依然存在不少问题,与一些较为优秀的开发系统相比,该系统还需进一步简化,数据流程还需进一步明晰,特别是数据之间的关联程度还需进一步加强。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1