0

我面临的问题在标题中给出。这就是我所在的地方:

  • 在端口 61911 上启动并运行 Socket 服务器:

    _server.Bind(new IPEndPoint(IPAddress.Any, 61911));

  • 并且该端口(61911)已全局打开并将服务器IP地址设置为192.168.1.2(我的PC)

  • 防火墙和防病毒程序处理得很好。

  • 运行Socket 服务器并从YouGetSignal.com获得端口打开状态

图片:

http://img189.imageshack.us/img189/1777/x07w.png

  • 在 ^Checking 时,Socket 服务器反应良好,我认为这意味着与服务器即时托管建立了连接。

  • 但是当通过客户端访问时,我收到指定的错误“无法建立连接......”

这是我在客户端中用于连接的代码:

private static void LoopConnect()
    {
        while (!_client.Connected)
        {
            try
            {

                IPAddress ip = IPAddress.Parse("**PUBLIC IP**");
                IPEndPoint remoteEP = new IPEndPoint(ip,61911);
                _client.Connect(remoteEP);
            }
            catch (SocketException e) { Console.WriteLine(e.Message); }
        }

        Console.WriteLine("Connected!");
    }

这段代码在服务器中处理接受:

private static void SetupServer()
    {
        Console.WriteLine("Setting up Server.. ");
        _server.Bind(new IPEndPoint(IPAddress.Any, 61911));
        _server.Listen(4);
        Console.WriteLine("Server UP!");
        _server.BeginAccept(new AsyncCallback(AcceptCallBack), null);
    }

    private static void AcceptCallBack(IAsyncResult AR)
    {
        Socket socket = _server.EndAccept(AR);
        _clients.Add(socket);
        socket.BeginReceive(_buffer, 0, _buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveCallback), socket);
        _server.BeginAccept(new AsyncCallback(AcceptCallBack), null);
    }

所以我认为这就是我可以提供的有关问题的所有信息..

*关于恶意软件保护、防火墙、端口转发..的一切都已完成。*并且端口在netstat -anb

解决方案赞赏:)

编辑:客户端发送请求,然后服务器确认。但我认为这并没有到达客户。为此,我应该在路由器中执行其他操作,例如从“内部”移植。这怎么可能???

4

1 回答 1

1

会发生什么:

  1. 客户端尝试连接到公共 IP。
  2. 这样做时,它将连接到网关(即您的路由器)
  3. 您的路由器拒绝访问该端口,因为您只从外部打开它,而不是从内部打开它。

要测试您的应用程序,只需使用您的本地 IP (192.168.1.2)。部署时,您可以使用外部地址。您也可以从路由器内部打开端口转发,但这超出了此答案的范围。

于 2013-07-19T10:17:06.090 回答