用Visual C#实现局域网点对点通讯
点对点即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 lishixinzhi/Article/program/net/201311/13042
区别如下:
1、服务器作为网络的节点,存储、处理网络上80%的数据、信息,因此也被称为网络的灵魂。做一个形象的比喻:服务器就像是邮局的交换机,而微机、笔记本、PDA、手机等固定或移动的网络终端,就如散落在家庭、各种办公场所、公共场所等处的电话机。
我们与外界日常的生活、工作中的电话交流、沟通,必须经过交换机,才能到达目标电话;同样如此,网络终端设备如家庭、企业中的微机上网,获取资讯,与外界沟通、娱乐等,也必须经过服务器,因此也可以说是服务器在“组织”和“领导”这些设备。
2、它是网络上一种为客户端计算机提供各种服务的高性能的计算机,它在网络操作系统的控制下,将与其相连的硬盘、磁带、打印机、Modem及各种专用通讯设备提供给网络上的客户站点共享,也能为网络用户提供集中计算、信息发表及数据管理等服务。它的高性能主要体现在高速度的运算能力、长时间的可靠运行、强大的外部数据吞吐能力等方面。
3、服务器的构成与微机基本相似,有处理器、硬盘、内存、系统总线等,它们是针对具体的网络应用特别制定的,因而服务器与微机在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面存在差异很大。尤其是随着信息技术的进步,网络的作用越来越明显,对自己信息系统的数据处理能力、安全性等的要求也越来越高,如果您在进行电子商务的过程中被黑客窃走密码、损失关键商业数据;
4、如果您在自动取款机上不能正常的存取,您应该考虑在这些设备系统的幕后指挥者————服务器,而不是埋怨工作人员的素质和其他客观条件的限制。
客户机和服务器都是独立的计算机。当一台连入网络的计算机向其他计算机提供各种网络服务(如数据、文件的共享等)时,它就被叫做服务器。而那些用于访问服务器资料的计算机则被叫做客户机。
5、严格说来,客户机/服务器模型并不是从物理分布的角度来定义,它所体现的是一种网络数据访问的实现方式。采用这种结构的系统目前应用非常广泛。如宾馆、酒店的客房登记、结算系统,超市的POS系统,银行、邮电的网络系统等。
4231 SOA 的概念
SOA 是一种架构模型,它将应用程序的不同功能单元(即服务)通过服务之间定义良好的接口和契约联系起来。接口采用中立的方式进行定义,它独立于实现服务的硬件平台、操作系统和编程语言。
不同的厂商和个人对 SOA 有如下不同的定义:
(1)Service-architecturecom 将 SOA 定义为: “本质上是服务的集合。服务间彼此通信,这种通信可能是简单的数据传送,也可能是两个或更多的服务协调进行某些活动。服务间需要某些方法进行连接。所谓服务就是精确定义、封装完善、独立于其他服务所处环境和状态的函数。”
(2)Looselycoupledcom 将 SOA 定义为: “按需连接资源的系统。在 SOA 中,资源被作为可通过标准方式访问的独立服务,提供给网络中的其他成员。与传统的系统结构相比,SOA 规定了资源间更为灵活的松散耦合关系。”
(3)Gartner 则将 SOA 描述为: “客户端/服务器的软件设计方法,一项应用由软件服务和软件服务使用者组成……SOA 与大多数通用的客户端/服务器模型的不同之处,在于它着重强调软件组件的松散耦合,并使用独立的标准接口。”
虽然不同厂商或个人对 SOA 有着不同的理解,但是从以上定义可以看出 SOA 的几个关键特性: 一种粗粒度、松散耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。
SOA 并不是一种现成的技术,而是一种架构和组织 IT 基础结构及业务功能的方法。SOA 是一种在计算环境中设计、开发、部署和管理离散逻辑单元(服务)的模型。SOA要求开发人员将应用设计为服务的集合,以及跳出应用本身进行思考,考虑现有服务的重用,或思索他们的服务如何能够被其他项目重用。“单独的”、“独立的”、“封装完善的”服务所具有的一个关键的好处是,可以采用多种不同方法将它们组合成较大型的服务,由此来实现重用。
4232 构成 SOA 的技术
SOA 本身是 “如何将软件组织在一起” 的抽象概念。它依赖于用 XML 和 Web 服务实现并以软件的形式存在的更加具体的观念和技术。此外,它还需要安全性、策略管理、可靠消息传递以及会计系统的支持,从而有效地工作。还可以通过分布式事务处理和分布式软件状态管理来进一步地改善它。
SOA 服务和 Web 服务之间的区别在于设计。SOA 概念并没有确切地定义服务具体如何交互,而仅仅定义了服务如何相互理解以及如何交互。其中的区别也就是定义如何执行流程的战略与如何执行流程的战术之间的区别。而另一方面,Web 服务在需要交互的服务之间如何传递消息有具体的指导原则; 从战术上实现 SOA 模型最常见的方式是通过HTTP 传递的 SOAP 消息。因而,从本质上讲,Web 服务是实现 SOA 的具体方式之一。
虽然 Web 服务是实现 SOA 最好的方式,但是 SOA 并不局限于 Web 服务。其他使用WSDL 直接实现服务接口并且通过 XML 消息进行通信的协议也可以包括在 SOA 之中。例如 CORBA 和 IBM 的 MQ 系统通过使用能够处理 WSDL 的新特征也可以参与到 SOA 中来。如果两个服务需要交换数据,那么它们还会需要使用相同的消息传递协议,但是数据接口允许相同的信息交换。
4233 SOA 的基本特征
SOA 是一种粗粒度、松散耦合的软件架构,其服务之间通过简单、精确定义的接口进行通讯,不涉及底层编程接口和通讯模型。这种模型具有下面几个特征(http://techccidnetcom/art/1110/20060210/425863_ 1html)[U1]。
(1)松散耦合。服务请求者到服务提供者的绑定与服务之间是松耦合的。松散耦合旨在将服务使用者和服务提供者在服务实现和客户如何使用服务方面隔离开来。服务接口作为与服务实现分离的实体而存在,服务请求者不知道提供者实现的技术细节,比如程序设计语言、部署平台等等。服务请求者往往通过消息调用操作请求消息和响应而不是通过使用文件格式。服务实现的修改完全不会影响到服务的使用者。
(2)粗粒度服务。服务粒度指的是服务所公开功能的范围,一般分为,细粒度和粗粒度。其中,细粒度服务是那些能够提供少量业务流程可用性的服务。粗粒度服务是那些能够提供高层业务逻辑的可用性服务。粗粒度服务可以灵活组合稳定性强、重用性高的细粒度服务,而快速形成新的业务逻辑。虽然细粒度的接口为请求者应用程序提供了更多的灵活性,它同样也意味着交互的模式可能随着不同的服务请求者而不同。这可能使对于服务提供者的支持更加困难。粗粒度接口保证服务请求者将以一致的方式使用服务。面向服务的体系结构不要求使用粗粒度接口,但是推荐使用它们作为外部集成的最佳实践。服务编排可以用来创建运行由细粒度操作组成的业务流程的粗粒度接口。
(3)标准化的接口。服务描述的重点在于与几部分交互所用的操作服务、调用操作的消息、构造这种消息的细节和关于向何处发送用于构造这种消息的处理细节的消息。通过服务接口的标准化描述,从而使得该服务可以提供给在任何异构平台和任何用户接口使用。该接口隐藏了实现服务的细节,允许独立于实现服务基于的硬件或软件平台和编写服务所用的编程语言使用服务。
(4)无状态服务。服务应该是独立的、自包含的请求,在实现时它不需要从一个请求到另一个请求的信息或状态。服务不应该依赖于其他服务的上下文和状态。当需要依赖时,它们最好定义成通用业务流程、函数和数据模型,而不是实现构件比如会话密钥。当然,请求者应用程序需要服务调用之间的持久状态,但是这不应该与服务提供者分开。
0条评论