TCP チャネル接続を使用して 2 つの異なるコンソール アプリケーションでチャット アプリケーションを作成していますが、クライアント コンソールまたはサーバー コンソールを実行すると、「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();
}
}
}
助けてください、私はここではかなり新しいので、投稿を正しく書いたかどうかわかりません。ご了承ください。
ありがとう