博文

webservice和remoting在分布式程序中的应用(2007-02-15 09:13:00)

摘要:webservice和remoting在分布式程序中的应用
1、.net remoting使用HttpChannel,可以和WebService一样使用Http协议的各种好处,比如传透防火墙,但WebService是一个跨平台的东东,Java和.Net可以互相提供和引用对方的WebService,.net remoting就限制于.net平台使用。我觉得.net remoting比web service在现阶段更具有实用性。
2、remoting是有状态的,是紧密耦合;web service是无状态的,是松散耦合;总的来说remoting适合局域网内,对性能和响应效率要求较高的场合;而web service适合跨网络,跨系统,对移植性和通用性要求较高的场合;remoting和web service严格的说都不是和J2EE的EJB对应的技术,如果一定要比较,那么部署在COM+/MTS的.net remoting组件可以和EJB对应。公允的说,目前DotNet在企业级应用上的结构还不完整。
3、
 
remoting在局域网上的表现绝对是大大强于web services,使用tcp管道不失真的传输数据,从而减轻了序列化和反序列化的工作,当然使用WEB服务的时候,一台计算机存储32位整数的方式与另一台计算机的存储方式是不同的,因此需要像XML这样易于理解的格式。web services 是IIS执行的,而REMOTING的扩展性强,使用HTTP信道和XML可以达到web services的技术的一部分,各有优势关键是对其底部的理解程度,仅仅会用等于没用
4、有个文章,忘了从哪找的了,请原作者原谅
  摘要:了解 Microsoft .NET Remoting 基础结构和 Microsoft ASP.NET Web 服务如何进行跨进程通信,了解这两种技术的工作原理以及如何为您的应用程序选择合适的技术。   
  目录
  概述
  序列化和元数据
  分布式应用程序设计:ASP.NET Web 服务和 .NET Remoting
  选择体系结构
  小结
 ......

阅读全文(5807) | 评论:0

异步服务器套接字示例(2007-02-09 11:31:00)

摘要:面的示例程序创建一个接收来自客户端的连接请求的服务器。该服务器是用异步套接字生成的,因此在等待来自客户端的连接时不挂起服务器应用程序的执行。该应用程序接收来自客户端的字符串,在控制台显示该字符串,然后将该字符串回显到客户端。来自客户端的字符串必须包含字符串“<EOF>”,以发出表示消息结尾的信号。 using System; using System.Net; using System.Net.Sockets; using System.Text; using System.Threading; // State object for reading client data asynchronously public class StateObject { // Client socket. public Socket workSocket = null; // Size of receive buffer. public const int BufferSize = 1024; // Receive buffer. public byte[] buffer = new byte[BufferSize]; // Received data string. public StringBuilder sb = new StringBuilder(); } public class AsynchronousSocketListener { // Thread signal. public static ManualResetEvent allDone = new ManualResetEvent(false); public AsynchronousSocketListener() { } public static void StartListening() { // Data buffer for incoming data. byte[] bytes = new Byte[1024]; // Establish the loc......

阅读全文(3218) | 评论:0

同步客户端套接字示例 (2007-02-09 11:29:00)

摘要: 下面的示例程序创建一个连接到服务器的客户端。该客户端是用同步套接字生成的,因此挂起客户端应用程序的执行,直到服务器返回响应为止。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。using System; using System.Net; using System.Net.Sockets; using System.Text; public class SynchronousSocketClient { public static void StartClient() { // Data buffer for incoming data. byte[] bytes = new byte[1024]; // Connect to a remote device. try { // Establish the remote endpoint for the socket. // This example uses port 11000 on the local computer. IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()) IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint remoteEP = new IPEndPoint(ipAddress,11000); // Create a TCP/IP socket. Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp ); // Connect the socket to the remote endpoint. Catch any errors. tr......

阅读全文(2444) | 评论:0

同步服务器套接字示例 (2007-02-09 11:28:00)

摘要:下面的示例程序创建一个接收来自客户端的连接请求的服务器。该服务器是用同步套接字生成的,因此在等待来自客户端的连接时挂起服务器应用程序的执行。该应用程序接收来自客户端的字符串,在控制台显示该字符串,然后将该字符串回显到客户端。来自客户端的字符串必须包含字符串“<EOF>”,以发出表示消息结尾的信号。using System; using System.Net; using System.Net.Sockets; using System.Text; public class SynchronousSocketListener { // Incoming data from the client. public static string data = null; public static void StartListening() { // Data buffer for incoming data. byte[] bytes = new Byte[1024]; // Establish the local endpoint for the socket. // Dns.GetHostName returns the name of the // host running the application. IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000); // Create a TCP/IP socket. Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp ); ......

阅读全文(2820) | 评论:0

Socket Visual 2005调试通过代码经典例子(2007-02-08 10:19:00)

摘要:using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Net.Sockets;
using System.Threading;
using System.Net;
using System.Text;
using System.IO;
namespace SocketRun
{
    // State object for receiving data from remote device.
    public class StateObject
    {
        // Client socket.
        public Socket workSocket = null;
        // Size of receive buffer.
        public const int BufferSize = 256;
        // Receive buffer.
        public b......

阅读全文(3961) | 评论:0

请求解决?“由于目标机器积极拒绝,无法连接。”(2007-02-08 09:22:00)

摘要:我是要实现两个计算机通讯,访问过程中产生这样的错误提示:
“由于目标机器积极拒绝,无法连接。” socket编程小弟刚刚接触,很不懂,请执教! 代码:(别人的自己拿来练习)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Net;
using System.Net.Sockets;
using System.IO;
using System.Collections; namespace SocketSample
{
    public partial class SocketSample : Form
    {
        private NetworkStream networkStream;
        private StreamReader streamReader;
        private StreamWriter streamWriter;
        ArrayList sb;
        TcpClient myclient ;
        bool flag = false;         public SocketSample()
&......

阅读全文(39903) | 评论:8

运用异步输入输出流编写socket进程通信(2007-02-08 09:21:00)

摘要:代码号为”merlin”的j2se1.4带来了一些激动人心的新特性,诸如对正则表达式的支持,异步输入输出流,通道(channel),字符集等.虽然该版本还处在测试阶段,但这些新特性早已让开发人员们跃跃欲试.在merlin发布之前,异步输入输出流的应用还只是c,c++程序员的特殊武器;在merlin中引入异步输入输出机制之后,java程序员也可以利用它完成很多简洁却是高质量的代码了.本文将介绍怎样使用异步输入输出流来编写socket进程通信程序.同步?异步输入输出机制的引入 在merlin之前,编写socket程序是比较繁琐的工作.因为输入输出都必须同步.这样,对于多客户端客户/服务器模式,不得不使用多线程.即为每个连接的客户都分配一个线程来处理输入输出.由此而带来的问题是可想而知的.程序员不得不为了避免死锁,线程安全等问题,进行大量的编码和测试.很多人都在抱怨为什么不在java中引入异步输入输出机制.比较官方的解释是,任何一种应用程序接口的引入,都必须兼容任何操作平台.因为java是跨平台的.而当时支持异步输入输出机制的操作平台显然不可能是全部.自java 2 platform以后,分离出j2se,j2me,j2ee三种不同类型的应用程序接口,以适应不同的应用开发.java标准的制订者们意识到了这个问题,并且支持异步输入输出机制的操作平台在当今操作平台中处于主流地位.于是,jdk(j2se) 的第五次发布中引入了异步输入输出机制.以前的socket进程通信程序设计中,一般客户端和服务器端程序设计如下: 服务器端: //服务器端监听线程while (true) <.............socket clientsocket;clientsocket = socket.accept(); //取得客户请求socket,如果没有//客户请求连接,线程在此处阻塞//用取得的socket构造输入输出流printstream os = new printstream(new bufferedoutputstream(clientsocket.getoutputstream(),1024), false);bufferedreader is = new bufferedreader(new inputstreamreader(clientsocket.getinputs......

阅读全文(5106) | 评论:0

Visual C# 2005中编写Socket网络程序(2007-02-08 09:19:00)

摘要:在网络环境下,我们最感兴趣的两个命名空间是System.Net和System.Net.Sockets。System.Net命名空间通常与较高程的操作有关,例如download或upload,试用HTTP和其他协议进行Web请求等等,而System.Net.Sockets命名空间所包含的类通常与较低程的操作有关。如果要直接使用Sockets或者TCP/IP之类的协议,这个命名空间的类是非常有用的。

  在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现。System.Net 命名空间中的所有其他网络访问类都建立在该套接字Socket实现之上,如TCPClient、TCPListener 和 UDPClient 类封装有关创建到 Internet 的 TCP 和 UDP 连接的详细信息;NetworkStream类则提供用于网络访问的基础数据流等,常见的许多Internet服务都可以见到Socket的踪影,如Telnet、Http、Email、Echo等,这些服务尽管通讯协议Protocol的定义不同,但是其基础的传输都是采用的Socket。

  其实,Socket可以象流Stream一样被视为一个数据通道,这个通道架设在应用程序端(客户端)和远程服务器端之间,而后,数据的读取(接收)和写入(发送)均针对这个通道来进行。

  可见,在应用程序端或者服务器端创建了Socket对象之后,就可以使用Send/SentTo方法将数据发送到连接的Socket,或者使用Receive/ReceiveFrom方法接收来自连接Socket的数据。

  针对Socket编程,.NET 框架的 Socket 类是 Winsock32 API 提供的套接字服务的托管代码版本。其中为实现网络编程提供了大量的方法,大多数情况下,Socket 类方法只是将数据封送到它们的本机 Win32 副本中并处理任何必要的安全检查。如果你熟悉Winsock API函数,那么用Socket类编写网络程序会非常容易,当然,如果你不曾接触过,也不会太困难,跟随下面的解说,你会发觉使用Socket类开发windows 网络应用程序原来有规可寻,......

阅读全文(5248) | 评论:2

异步客户端套接字示例(2007-02-08 09:18:00)

摘要:下面的示例程序创建一个连接到服务器的客户端。该客户端是用异步套接字生成的,因此在等待服务器返回响应时不挂起客户端应用程序的执行。该应用程序将字符串发送到服务器,然后在控制台显示该服务器返回的字符串。using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Text; // State object for receiving data from remote device. public class StateObject { // Client socket. public Socket workSocket = null; // Size of receive buffer. public const int BufferSize = 256; // Receive buffer. public byte[] buffer = new byte[BufferSize]; // Received data string. public StringBuilder sb = new StringBuilder(); } public class AsynchronousClient { // The port number for the remote device. private const int port = 11000; // ManualResetEvent instances signal completion. private static ManualResetEvent connectDone = new ManualResetEvent(false); private static ManualResetEvent sendDone = new ManualResetEvent(false); private static ManualResetEvent receiveDone = new......

阅读全文(2316) | 评论:0

C#.net同步异步SOCKET通讯和多线程总结(2007-02-08 09:14:00)

摘要:同步套接字通信 Socket支持下的网上点对点的通信 服务端实现监听连接,客户端实现发送连接请求,建立连接后进行发送和接收数据的功能 服务器端建立一个socket,设置好本机的ip和监听的端口与socket进行绑定,开始监听连接请求,当接收到连接请求后,发送确认,同客户端建立连接,开始与客户端进行通信。 客户端建立一个socket,设置好服务器端的IP和提供服务的端口,发出连接请求,接收到服务的确认后,尽力连接,开始与服务器进行通信。 服务器端和客户端的连接及它们之间的数据传送均采用同步方式。   Socket Socket是tcp\ip网络协议接口。内部定义了许多的函数和例程。可以看成是网络通信的一个端点。在网络通信中需要两个主机或两个进程。通过网络传递数据,程序在网络对话的每一端需要一个socket。        Tcp/IP传输层使用协议端口将数据传送给一个主机的特定应用程序,协议端口是一个应用程序的进程地址。传输层模块的网络软件模块要于另一个程序通信,它将使用协议端口,socket是运行在传输层的api,使用socket建立连接发送数据要指定一个端口给它。 Socket: Stream Socket流套接字 Socket提供双向、有序、无重复的数据流服务,出溜大量的网络数据。 Dgram socket数据包套接字 支持双向数据流,不保证传输的可靠性、有序、无重复。 Row socket 原始套接字 访问底层协议 建立socket 用C# 命名空间:using System.Net;using System.Net.Socket; 构造新的socket对象:socket原型: Public socket (AddressFamily addressFamily,SocketType sockettype,ProtocolType protocolType) AddressFamily 用来指定socket解析地址的寻址方案。InterNetwork标示需要ip版本4的地址,InterNetworkV6需要ip版本6的地址 SocketType参数指定socket类型Raw支持基础传输协议访问,Stream支持可靠,双向,基于连接的数据流。 Proto......

阅读全文(11931) | 评论:3