遠端開發分散式C#程式設計例項

iDotNetSpace發表於2009-01-20

從客戶端到服務端的遠端網路通訊,傳送訊息並返回遠端訊息。
遠端物件(RemoteTest)C# 類庫程式碼部分:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtusing System;

namespace RemoteTest
{
  
public class TestLoader : MarshalByRefObject
   {
       
public TestLoader()
        {
           
string stringWrite = "stor load.";
           Console.WriteLine(stringWrite);
        }
      
public string sayHello(string msg)
       {
           Console.WriteLine(
"Message: { 0 } ", msg);
           Console.WriteLine(
"Welcome to Message send Systems");

          
string stc = "Hello from remote";
          
return stc;
        }
    }
}

RemoteTest元件中的 TestLoader 類繼承了 System.MarshalByRefObject 類,便讓客戶端能訪問該遠端物件了。


服務端(Server)命令列應用程式程式碼部分:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtusing System;
using System.Runtime;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteTest;

namespace Server
{
  
public class Program
   {
      
public static void Main(string[] args)
       {
           TcpServerChannel channel
= new TcpServerChannel(9932);
           ChannelServ ices.RegisterChannel(channel, false);
           RemotingConfiguration.RegisterWellKnownServiceType(
typeof(TestLoader),"TestLoader",WellKnownObjectMode.SingleCall);
           Console.WriteLine(
"Hello From Server");
           Console.ReadLine();
        }
    }
}

注:引用新增元件:System.Runtime.Remoting(下同)。

客戶端(Client)命令列應用程式程式碼部分:

<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--&gtusing System;
using System.Runtime.Remoting;
using System.Runtime.Remoting.Channels;
using System.Runtime.Remoting.Channels.Tcp;
using RemoteTest;

namespace Client
{
  
public class ClassClient
   {
      
public static void Main(string[] args)
       {

          
string stringTcp = "tcp://localhost:9932/TestLoader";
           TestLoader loader
= (TestLoader)Activator.GetObject(typeof(RemoteTest.TestLoader),stringTcp);
           string msg;
          
Console.Write("Enter Message: ");
           msg
= Console.ReadLine();
           Console.WriteLine(
"Message: {0}" + msg);
          
string res = loader.sayHello(msg);
           Console.WriteLine(res);
        }
    }
}

這裡對new 管道宣告的那兩行已略寫。

 

程式除錯:啟動Server後,再啟動Client。輸入值後關閉Client,值便在Server中顯示。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-541545/,如需轉載,請註明出處,否則將追究法律責任。

相關文章