每个套接字地址通常只允许使用一次&”.网络远程处理
本文关键字:一次 网络 处理 程处理 地址 套接字 许使用 | 更新日期: 2023-09-27 17:58:14
我基本上是在制作一个Client/Server应用程序和另一个从服务器(监视器)获取信息的软件。我正在这样做,并且必须使用.NET远程处理。
当我试图在我的监视器和服务器之间建立连接时,我得到了错误。我的服务器在端口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
有什么想法吗?
谢谢。
您收到错误的原因是创建了一个新的服务器实例,该实例开始侦听端口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);