C#visual studio TCP频道已注册

C#visual studio TCP频道已注册,c#,.net-remoting,C#,.net Remoting,我正在使用TCP通道连接创建一个聊天应用程序,其中包含两个不同的控制台应用程序,但当我运行客户端控制台或服务器控制台时,我会得到“TCP已注册” 我有4个项目的代码 接口 远程对象 客户 服务器 以下是接口代码: using System; public interface IRemoteObject { void GetData(string myString); } 以下是RemoteObject代码: using System; public class R

我正在使用TCP通道连接创建一个聊天应用程序,其中包含两个不同的控制台应用程序,但当我运行客户端控制台或服务器控制台时,我会得到“TCP已注册”

我有4个项目的代码

  • 接口
  • 远程对象
  • 客户
  • 服务器
  • 以下是接口代码:

    using System;
    
    public interface IRemoteObject
    {
        void GetData(string myString);        
    
    }
    
    以下是RemoteObject代码:

    using System;
    
    public class RemoteObject : MarshalByRefObject,IRemoteObject
    {
        //Server Method
        public RemoteObject()
        {
            Console.WriteLine("Server text");                 
        }
    
        //Client Method
        public void GetData(string myString)
        {
            Console.WriteLine(myString);
        }
    }
    
    以下是客户端代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Threading;
    
    namespace ClientConsole
    {
        public class Client
        {
            public static void Main()
            {
    
                ThreadStart client1 = new ThreadStart(ClientSide);
                Thread client2 = new Thread(client1);
                ThreadStart server1 = new ThreadStart(ServerSide);
                Thread server2 = new Thread(server1);
                client2.Start();
                server2.Start();           
    
            }
            public static void ClientSide()
            {
                Console.WriteLine("ClientSide....");
                TcpChannel ch2 = new TcpChannel();
                ChannelServices.RegisterChannel(ch2, true);
    
                IRemoteObject objRemoteRef = (IRemoteObject)Activator.GetObject(typeof(IRemoteObject), "tcp://127.0.0.1:2233/M");
    
                while (true)
                {
                    string x = Console.ReadLine();
                    objRemoteRef.GetData(x);
    
                }
    
            }
    
            public static void ServerSide()
            {
                Console.WriteLine("ServerSide....");
                TcpChannel ch2 = new TcpChannel(2233);
                ChannelServices.RegisterChannel(ch2, true);
    
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "M", WellKnownObjectMode.Singleton);
    
            }
    
        }
    
    }
    
    以下是服务器代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Runtime;
    using System.Runtime.Remoting;
    using System.Runtime.Remoting.Channels;
    using System.Runtime.Remoting.Channels.Tcp;
    using System.Threading;
    
    
    namespace ServerConsole
    {
        public class Server
        {
            public static void Main()
            {
                ThreadStart server1 = new ThreadStart(ServerSide);
                Thread server2 = new Thread(server1);
                ThreadStart client1 = new ThreadStart(ClientSide);
                Thread client2 = new Thread(client1);
                server2.Start();
                client2.Start();
    
    
            }
    
            public static void ServerSide()
            {
                Console.WriteLine("ServerSide....");
                TcpChannel ch2 = new TcpChannel();
                ChannelServices.RegisterChannel(ch2, true);
    
                IRemoteObject objRemoteRef = (IRemoteObject)Activator.GetObject(typeof(IRemoteObject), "tcp://127.0.0.1:2333/M");
    
                while (true)
                {
                    string x = Console.ReadLine();
                    objRemoteRef.GetData(x);
    
                }
            }
    
            public static void ClientSide()
            {
                Console.WriteLine("ClientSide....");
                TcpChannel ch1 = new TcpChannel(2233);
                ChannelServices.RegisterChannel(ch1, true);
    
                RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject), "M", WellKnownObjectMode.Singleton);
    
                Console.ReadLine();
    
    
    
            }
        }
    }
    
    请帮忙,我是新来的,我不确定我写的帖子是否正确,请理解

    谢谢

    试试这个:

    客户

    public class Client
    {
        public static void Main(string[] args)
        {
    
            ThreadStart client1 = new ThreadStart(ClientSide);
            Thread client2 = new Thread(client1);
            ThreadStart server1 = new ThreadStart(ServerSide);
            Thread server2 = new Thread(server1);
            client2.Start();
            server2.Start();
        }
        public static void ClientSide()
        {
            Console.WriteLine("ClientSide....");
            TcpChannel ch2 = (TcpChannel)Helper.GetChannel(2333, true);
            ChannelServices.RegisterChannel(ch2, false);
            IRemoteObject objRemoteRef = (IRemoteObject)Activator.GetObject(
                typeof(IRemoteObject), "tcp://127.0.0.1:2233/M");
            while (true)
            {
                string x = Console.ReadLine();
                objRemoteRef.GetData(x);
            }
        }
        public static void ServerSide()
        {
            Console.WriteLine("ServerSide....");
            TcpChannel ch2 = (TcpChannel)Helper.GetChannel(0, true);
            ChannelServices.RegisterChannel(ch2, false);
            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(RemoteObject), "M", WellKnownObjectMode.Singleton);
        }
    }
    
    服务器:

    public class Server
    {
        public static void Main()
        {
            ThreadStart server1 = new ThreadStart(ServerSide);
            Thread server2 = new Thread(server1);
            ThreadStart client1 = new ThreadStart(ClientSide);
            Thread client2 = new Thread(client1);
            server2.Start();
            client2.Start();
        }
        public static void ServerSide()
        {
            Console.WriteLine("ServerSide....");
            TcpChannel ch2 = (TcpChannel)Helper.GetChannel(2233, true);
            ChannelServices.RegisterChannel(ch2, false);
            IRemoteObject objRemoteRef = (IRemoteObject)Activator.GetObject(
                typeof(IRemoteObject), "tcp://127.0.0.1:2333/M");
            while (true)
            {
                string x = Console.ReadLine();
                objRemoteRef.GetData(x);
            }
        }
        public static void ClientSide()
        {
            Console.WriteLine("ClientSide....");
            TcpChannel ch1 = (TcpChannel)Helper.GetChannel(0, true);
            ChannelServices.RegisterChannel(ch1, false);
            RemotingConfiguration.RegisterWellKnownServiceType(
                typeof(RemoteObject), "M", WellKnownObjectMode.Singleton);
            Console.ReadLine();
        }
    }
    
    助手

    public class Helper
    {
        public static IChannel GetChannel(int tcpPort, bool isSecure)
        {
            BinaryServerFormatterSinkProvider serverProv =
                new BinaryServerFormatterSinkProvider();
            serverProv.TypeFilterLevel = TypeFilterLevel.Full;
            IDictionary propBag = new Hashtable();
            propBag["port"] = tcpPort;
            propBag["typeFilterLevel"] = TypeFilterLevel.Full;
            propBag["name"] = Guid.NewGuid().ToString();
            if (isSecure)
            {
                propBag["secure"] = isSecure;
                propBag["impersonate"] = false; 
            }
            return new TcpChannel(
                propBag, null, serverProv);
        }
    }