我基本上制作了一个客户端/服务器应用程序和另一个从服务器(监视器)获取信息的软件。我这样做并且必须使用.NET远程处理。
当我尝试在monintor和服务器之间建立连接时,我收到错误。我的服务器侦听端口5000上的连接,我的远程处理侦听端口5002。
这就是我在服务器中收听的方式:
class Server : MarshalByRefObject, ServerInterface
{
public Server()
{
Listener();
}
private void Listener()
{
TcpListener listener = new TcpListener(IPAddress.Any, 5000);
listener.Start();
while (offline == false)
{
TcpClient client = listener.AcceptTcpClient();
}
}
}
这是我的远程对象是用一个定义的接口构造的,它有一个返回列表的方法。
此代码位于控制台应用程序的主要部分,同时还创建了一个新的服务器实例。
TcpChannel channel = new TcpChannel(5002);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Server),
"Server", WellKnownObjectMode.SingleCall);
Server s = new Server();
这是我在我的监视器上构建tcpchannel / remoting的方法
IServer obj = (ServerInterface)Activator.GetObject(typeof(ServerInterface), "tcp://localhost:5002/Server");
但是当我尝试拨打其中一种方法时,我会在标题中收到错误,
List<string> cons = obj.getIPs(); //error line
任何想法的人?
谢谢。
答案 0 :(得分:1)
您收到错误是因为创建了一个新的服务器实例,它开始侦听端口5000(Server s = new Server();
),然后当创建一个新的远程实例时,它的默认构造函数会运行并尝试执行相同。
你需要服务器在端口5000上单独收听吗?如果这样做,您可以创建另一个为非远程实例运行的构造函数:
class Server : MarshalByRefObject, ServerInterface
{
public Server()
{
}
public Server(bool local)
{
Listener();
}
private void Listener()
{
TcpListener listener = new TcpListener(IPAddress.Any, 5000);
listener.Start();
while (offline == false)
{
TcpClient client = listener.AcceptTcpClient();
}
}
}
...
TcpChannel channel = new TcpChannel(5002);
ChannelServices.RegisterChannel(channel, false);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(Server),
"Server", WellKnownObjectMode.SingleCall);
Server s = new Server(true);