Client 소스 예제.(Client.EXE)

using System;
using ActMode;
using System.Runtime.Remoting; // RemotingConfiguration

namespace ActClient
{
    ///
    /// Summary description for Class1.
    ///
    class Class1
    {
        static void Main(string[] args)
        {
            // 원격 객체 프록시 생성
            //ActModeClass obj = (ActModeClass)Activator.GetObject(typeof(ActMode.ActModeClass), "http://localhost:1111/ActModeUri");
            //RemotingConfiguration.RegisterActivatedClientType(typeof(ActMode.ActModeClass), "http://localhost:1111/ActModeApp");
            //ActModeClass obj = new ActModeClass();
            ActModeClass obj = (ActModeClass)Activator.GetObject(typeof(ActMode.ActModeClass),
            "tcp://localhost:1111/ActModeUri");

            // 알림 메시지 표시
            Console.WriteLine("끝내려면 /quit 를 입력하세요.");

            while (true)
            {
                // 이용자로부터 문자열을 받는다
                string strText = Console.ReadLine();

                // "/quit" 문자열을 입력하면 프로그램을 종료시킨다
                if (strText == "/quit")
                    break;

                // 원격 객체의 메서드를 호출한다
                obj.AddString(strText);
            }
        }
    }
}

Server 소스 예제.(Server.EXE)
using System;

using System.Runtime.Remoting; // RemotingConfiguration
using System.Runtime.Remoting.Channels; // ChannelServices
using System.Runtime.Remoting.Channels.Tcp; // HttpChannel

namespace ActHosting
{
    ///
    /// Summary description for Class1.
    ///
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            // HTTP 1111 port 채널을 등록한다
            //ChannelServices.RegisterChannel(new HttpChannel(1111));
            ChannelServices.RegisterChannel(new TcpChannel(1111));

            // ActMode 어셈블리의 ActModeClass를 Singleton 모드로 등록한다
//            RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.Singleton);
            //RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass), "ActModeUri", WellKnownObjectMode.SingleCall);
            //RemotingConfiguration.RegisterActivatedServiceType(typeof(ActMode.ActModeClass));
            //RemotingConfiguration.ApplicationName = "ActModeApp";

            // ActMode 어셈블리의 ActModeClass를 Singleton 모드로 등록한다
            RemotingConfiguration.RegisterWellKnownServiceType(typeof(ActMode.ActModeClass),
                "ActModeUri", WellKnownObjectMode.SingleCall);

 

            // 이용자 알림 메시지
            Console.WriteLine("호스팅 어플리케이션이 시작되었습니다.");
            Console.WriteLine("엔터키를 누르면 종료합니다.");

            // 대기 모드로 들어간다
            Console.ReadLine();
        }
    }
}

object 소스 예제.(DLL)
using System;

namespace ActMode
{
    ///
    /// Summary description for Class1.
    ///
    public class ActModeClass : MarshalByRefObject
    {
        string m_strString;

        public ActModeClass()
        {
            Console.WriteLine("생성자가 호출되었습니다.");
        }

        public void AddString(string strStr)
        {
            m_strString += strStr;

            Console.WriteLine(m_strString);
        }
    }
}

참조
- System.Runtime.Remoting 을 하시고
using 부분은 주의 깊게 봐 주십시요.
깊이있게 공부하실분은 channel 통신을 검색해서 공부하시기 바랍니다.



+ Recent posts