知识大全 用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相关参考
VisualC++实现局域网IP多播效果 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在局域网
用VisualC#来修改和删除数据库记录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 在前面的一
用VisualC++2005编写更快的代码 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 对于C
VisualC#中轻松浏览数据库记录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 用Delphi
知识大全 局域网中GUEST关闭,用局域网IP地址访问,出现要输入GUEST密码
局域网中GUEST关闭,用局域网IP地址访问,出现要输入GUEST密码?怎么才能去除? 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的
用Delphi实现局域网内消息传递 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!本程序介绍如何在局
VisualC#中的数据绑定 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!我们知道在由于Visua
用VisualC#动态生成组件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 通常在写程序的时候
通过VisualC#.NET建一个DTS任务 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 本文
知识大全 用Visual C#调用Windows API函数
用VisualC#调用WindowsAPI函数 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! A