知识大全 用Visual C#实现局域网点对点通讯

Posted 计算机

篇首语:傲不可长,欲不可纵,乐不可极,志不可满。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用Visual C#实现局域网点对点通讯相关的知识,希望对你有一定的参考价值。

用Visual C#实现局域网点对点通讯  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  点对点即Peer To Peer 通常简写为P P 所谓网络中的点对点 其实可以看成是一种对等的网络模型 P P其实是实现网络上不同计算机之间 不经过中继设备直接交换数据或服务的一种技术 P P由于允许网络中任一台计算机可以直接连接到网络中其他计算机 并与之进行数据交换 这样既消除了中间环节 也使得网络上的沟通变得更容易 更直接     P P作为一种网络的模型 它有别于传统的客户/服务器模型 客户/服务器模型一般都有预定义的客户机和服务器 而在P P模型转并没有明确的客户端和服务器 但其实在P P模型中 每一台计算机既可以看成是服务器 也可以看成是客户机 在网络中 传统上的客户机/服务器通讯模型中 发送服务请求或者发送数据的计算机 一般称为客户机 而接收 处理服务或接收数据的计算机称为服务器 而在P P网络模型中 计算机不仅接收数据 还有发送数据 不仅提出服务请求 还有接收对方的服务请求     在下面介绍的用Visual C#实现的局域网点对点通讯程序 就有如下特点 在网络利用此通讯程序进行通讯的任一计算机 在通讯之前 都需要侦听端口号 接受其他机器的连接申请 并在连接建立后 就可以接收对方发送来的数据 同时也可以向其他机器提出连接申请 并在对方计算机允许建立连接请求后 发送数据到对方 可见在网络中利用此软件进行P P网络通讯的任一计算机既是客户机 同样也是服务器      一.程序的设计 调试 运行的软件环境     ( ) 微软公司视窗 服务器版    ( ) Visual Studio Net正式版 Net FrameWork SDK版本号      二.关键步骤及其解决方法     关键步骤就是实现信息在网络中的发送和接收 数据接收使用的是Socket 数据发送使用的是NeorkStream      利用Socket来接收信息     为了更清楚的说明问题 程序在处理数据发送和接收时采用了不通的端口号 发送数据程序在缺省状态设定的端口号为 下面代码是侦听端口号 接受网络中对此端口号的连接请求 并在建立连接后 通过Socket接收远程计算机发送来的数据     try    TcpListener tlListen = new TcpListener ( ) ;  //侦听端口号  tlListen Start ( ) ;  Socket skSocket = tlListen AcceptSocket ( );  //接受远程计算机的连接请求 并获得用以接收数据的Socket实例  EndPoint tempRemoteEP = skSocket RemoteEndPoint;  //获得远程计算机对应的网络远程终结点  while (true)    Byte [] byStream = new Byte[ ];  //定义从远程计算机接收到数据存放的数据缓冲区  int i = skSocket ReceiveFrom(byStream ref tempRemoteEP);  //接收数据 并存放到定义的缓冲区中  string sMessage = System Text Encoding UTF GetString(byStream);  //以指定的编码 从缓冲区中解析出内容  MessageBox Show ( sMessage );  //显示传送来的数据      catch ( System Security SecurityException )    MessageBox Show ( 防火墙安全错误! 错误   MessageBoxButtons OK MessageBoxIcon Exclamation);       利用NeorkStream来传送信息     在使用StreamWriter处理NeorkStream传送数据时 数据传送的编码类型是 UTF 下列代码是对IP地址为 的计算机的 端口号提出连接申请 并在连接申请建立后 以UTF 编码发送字符串 您好 见到您很高兴 到对方 由于下列代码中的注释比较详细 这里就不具体介绍了 下列代码也是使用NeorkStream传送数据的典型代码     try    TcpClient tcpc = new TcpClient ( );  //对IP地址为 的计算机的 端口提出连接申请  NeorkStream tcpStream = tcpc GetStream ( );  //如果连接申请建立 则获得用以传送数据的数据流    catch ( Exception )    MessageBox Show ( 目标计算机拒绝连接请求! ) ;  break ;    try    string sMsg = 您好 见到您很高兴 ;  StreamWriter reqStreamW = new StreamWriter (tcpStream);  //以特定的编码往向数据流中写入数据 默认为UTF 编码  reqStreamW Write (sMsg);  //将字符串写入数据流中  reqStreamW Flush ( );  //清理当前编写器的所有缓冲区 并使所有缓冲数据写入基础流    catch(Exception)    MessageBox Show ( 无法发送信息到目标计算机! ) ;      当然在具体用Visual C#实现网络点对点通讯程序时 还必须掌握很多其他方面的知识 如资源的回收 在用Visual C#编写网络应用程序的时候 很多朋友遇到这样的情况 当程序退出后 通过Windows的 资源管理器 看到的是进程数目并没有减少 这是因为程序中使用的线程可能并没有有效退出 虽然Thread类中提供了 Abort 方法用以中止进程 但并不能够保证成功退出 因为进程中使用的某些资源并没有回收 在某些情况下垃圾回收器也不能保证完全的回收资源 还是需要我们自己手动回收资源的 在本文介绍的程序中也涉及到资源手动回收的问题 实现方法可参阅下面具体实现步骤中的第十二步      三.具体步骤     在了解 掌握了上面的关键问题及其解决方法后 再实现用Visual C#实现网络点对点通讯程序相对就容易许多 下面是具体的实现步骤      启动Visual Studio Net 并新建一个Visual C#项目 名称为【Visual C#实现网络点对点通讯程序】      在Visual Studio Net集成开发环境中的【解决方案资源管理器】窗口中 双击Form cs文件 进入Form cs文件的编辑界面      在Form cs文件的开头 用下列导入命名空间代码替代系统缺省的导入命名空间代码     using System ;  using System Drawing ;  using System Collections ;  using System ComponentModel ;  using System Windows Forms ;  using System Data ;  using System Net Sockets ;  using System Net ;  using System IO ;  using System Text ;  using System Threading ;     再把Visual Studio Net的当前窗口切换到【Form cs(设计)】窗口 并从【工具箱】中的【Windows窗体组件】选项卡中往窗体中拖入下列组件     四个Button组件 二个ListBox组件 四个TextBox组件 一个StatusBar组件 五个Label组件 并在四个Button组件拖入窗体后 分别在窗体设计界面中双击它们 则系统会在Form cs文件中分别产生这四个组件的Click事件对应的处理代码      在【解决方案资源管理器】窗口中 双击Form cs文件 进入Form cs文件的编辑界面 以下面代码替代系统产生的InitializeComponent过程 下面代码是对上面添加的组件进行初始化     private void InitializeComponent ( )    this listBox = new System Windows Forms ListBox ( ) ;  this textBox = new System Windows Forms TextBox ( ) ;  this label = new System Windows Forms Label ( ) ;  this label = new System Windows Forms Label ( ) ;  this textBox = new System Windows Forms TextBox ( ) ;  this button = new System Windows Forms Button ( ) ;  this textBox = new System Windows Forms TextBox ( ) ;  this label = new System Windows Forms Label ( ) ;  this label = new System Windows Forms Label ( ) ;  this label = new System Windows Forms Label ( ) ;  this button = new System Windows Forms Button ( ) ;  this button = new System Windows Forms Button ( ) ;  this button = new System Windows Forms Button ( ) ;  this textBox = new System Windows Forms TextBox ( ) ;  this statusBar = new System Windows Forms StatusBar ( ) ;  this statusBarPanel = new System Windows Forms StatusBarPanel( );  this statusBarPanel = new System Windows Forms StatusBarPanel( );  this label = new System Windows Forms Label ( ) ;  this listBox = new System Windows Forms ListBox ( ) ;  ( ( System ComponentModel ISupportInitialize )  ( this statusBarPanel ) ) BeginInit ( ) ;  ( ( System ComponentModel ISupportInitialize )  ( this statusBarPanel ) ) BeginInit ( ) ;  this SuspendLayout ( ) ;  this listBox ItemHeight = ;  this listBox Location = new System Drawing Point ( ) ;  this listBox Name = listBox ;  this listBox Size = new System Drawing Size ( ) ;  this listBox TabIndex = ;  this textBox Location = new System Drawing Point ( ) ;  this textBox Name = textBox ;  this textBox Size = new System Drawing Size ( ) ;  this textBox TabIndex = ;  this textBox Text = ;  this label Location = new System Drawing Point ( ) ;  this label Na cha138/Article/program/net/201311/13042

相关参考

知识大全 Visual C++实现局域网IP多播效果

VisualC++实现局域网IP多播效果  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在局域网

知识大全 用Visual C#来修改和删除数据库记录

用VisualC#来修改和删除数据库记录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在前面的一

知识大全 用Visual C++ 2005编写更快的代码

用VisualC++2005编写更快的代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  对于C

知识大全 Visual C#中轻松浏览数据库记录

VisualC#中轻松浏览数据库记录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用Delphi

知识大全 局域网中GUEST关闭,用局域网IP地址访问,出现要输入GUEST密码

局域网中GUEST关闭,用局域网IP地址访问,出现要输入GUEST密码?怎么才能去除?  以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的

知识大全 用Delphi实现局域网内消息传递

用Delphi实现局域网内消息传递  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本程序介绍如何在局

知识大全 Visual C#中的数据绑定

VisualC#中的数据绑定  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我们知道在由于Visua

知识大全 用Visual C#动态生成组件

用VisualC#动态生成组件  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  通常在写程序的时候

知识大全 通过Visual C#.NET建一个DTS任务

通过VisualC#.NET建一个DTS任务  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  本文

知识大全 用Visual C#调用Windows API函数

用VisualC#调用WindowsAPI函数  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  A