轻松架起远程C-S体系

发表于:2007-05-25来源:作者:点击数: 标签:
本文将介绍如何轻松架起远程客户/ 服务器 体系结构,让您领略C#编成的带来的无限精简便利。 首先,实现服务器端。代码分析如下: //引入相应命名空间 using System; using System.Runtime.Remoting; using System.Runtime.Remoting.Channels; using System.R

  本文将介绍如何轻松架起远程客户/服务器体系结构,让您领略C#编成的带来的无限精简便利。

  首先,实现服务器端。代码分析如下:
  //引入相应命名空间
  using System;
  using System.Runtime.Remoting;
  using System.Runtime.Remoting.Channels;
  using System.Runtime.Remoting.Channels.Tcp;

  namespace ServerClass {
   //实现一个服务器和客户端将要共同进行通讯的类MyRemoteClass
   public class MyRemoteClass: MarshalByRefObject
   {
    public MyRemoteClass() {
    }
    //这个方法是服务器和客户端进行通讯的,当然也可以定义其他更多的方法
    //客户端传送一个字符串过来
    public bool SetString(String sTemp) {
     try {
      //服务器端打印客户端传过来的字符串。返回逻辑值
      Console.WriteLine("This string '{0}' has a length of {1}", sTemp, sTemp.Length);
      return sTemp != "";
     } catch {
      return false;
     }
    }
   }



   //服务器控制类,这个类只是为了控制启动和关闭服务器的作用,你也可以把它的Main放到MyRemoteClass类中去。
   public class MyServer {
    public static void Main() {
     //打开并注册一个服务
     TcpChannel chan = new TcpChannel(8085);
     ChannelServices.RegisterChannel(chan);
     RemotingConfiguration.RegisterWellKnownServiceType(
       System.Type.GetType("ServerClass.MyRemoteClass"),
       "RemoteTest", WellKnownObjectMode.SingleCall);
     //保持运行
     System.Console.WriteLine("Hit <enter> to exit...");
     System.Console.ReadLine();
    }
   }
  }

   然后,实现客户端。代码分析如下:
  //引入相应命名空间
  using System;
  using System.Runtime.Remoting.Channels;
  using System.Runtime.Remoting.Channels.Tcp;
  //引入服务器和客户端进行通讯的类MyRemoteClass
  using ServerClass;

  namespace ClientClass {
   public class MyClient {
    public static void Main() {
     try {
      //打开并注册一个TCP通道
      TcpChannel chan = new TcpChannel();
      ChannelServices.RegisterChannel(chan);
      连接服务器,获取通讯类
      MyRemoteClass obj = (MyRemoteClass) Activator.GetObject(typeof(MyRemoteClass),
         "tcp://localhost:8085/RemoteTest");


      if (obj == null)
       System.Console.WriteLine("Could not locate server");
      else
       if (obj.SetString("Sending String to Server"))
        System.Console.WriteLine("Suclearcase/" target="_blank" >ccess: Check the other console to verify.");
       else
        System.Console.WriteLine("Sending the test string has failed.");
      System.Console.WriteLine("Hit <enter> to exit...");
      System.Console.ReadLine();
     } catch (Exception exp) {
      Console.WriteLine(exp.StackTrace);
     }
    }
   }
  }
  编译服务器代码
  csc csc /out:MyServer.exe MyServer.cs
  编译客户端代码
  csc /r:MyServer.exe MyClient.cs
  启动服务器c:\>start MyServer
  启动客户端c:\>MyClient

原文转自:http://www.ltesting.net