我正在使用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();
}
}
}
请帮助,我在这里很新,我不确定我的帖子是否正确,请理解。
由于
答案 0 :(得分:2)
试试这个:
客户
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();
}
}
Helper
班
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);
}
}