【问题标题】:Only one usage of each socket address is normally permitted..." .net remoting每个套接字地址通常只允许使用一次..." .net remoting
【发布时间】:2014-05-29 01:11:00
【问题描述】:

我基本上是在制作一个客户端/服务器应用程序和另一个从服务器(监视器)获取信息的软件。我正在这样做,并且必须使用 .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

各位有什么想法吗?

谢谢。

【问题讨论】:

  • 听起来您正在创建多个 TCPChannel 实例,但如果没有完整代码则无法判断,请发布更多信息。
  • 我 100% 确定没有创建其他 tcpchannel。唯一的其他侦听器是服务器在端口 5000 上侦听客户端。
  • 也许另一个程序正在使用该端口?也许这可以帮助你:en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers

标签: c# .net sockets remoting


【解决方案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);

【讨论】:

    猜你喜欢
    • 2014-01-16
    • 1970-01-01
    • 2013-03-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2017-07-14
    • 1970-01-01
    相关资源
    最近更新 更多