首页 文章

其他计算机无法连接我的程序

提问于
浏览
0

我正在构建一个C#聊天程序,但我遇到了外部连接问题 . 当同一台计算机同时连接服务器和客户端时,似乎没有问题,但是当我尝试在一台计算机上托管连接时,另一台计算机无法作为客户端连接 . 这里是相关的代码:class Server:public void Connect(string ipAddr,string port){server = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);

IPEndPoint ipLocal = new IPEndPoint(IPAddress.Any, Convert.ToInt32(port));

        server.Bind(ipLocal);//bind to the local IP Address...
        server.Listen(5);//start listening...

        // create the call back for any client connections...
        server.BeginAccept(new AsyncCallback(OnClientConnect), null);
    }
    public void Disconnect()
    {
        server.Close();
        server = null;
        tempSocket = null;
    }

    public void OnClientConnect(IAsyncResult asyn)
    {
        try
        {
            if (server != null)
            {
                tempSocket = server.EndAccept(asyn);

                WaitForData(tempSocket);

                server.BeginAccept(new AsyncCallback(OnClientConnect), null);
            }
        }
        catch (ObjectDisposedException)
        {
            Debugger.Log(0, "1", "OnClientConnect: Socket has been closed.");
        }
        catch (Exception e)
        {
            MessageBox.Show(e.Message, "OnClientConnect Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }

    }

客户端类:public void Connect(string ipAddr,string port){client = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); IPEndPoint ipe = new IPEndPoint(IPAddress.Parse(ipAddr),Convert.ToInt32(port)); client.Connect(IPE);

clientListener = new Thread(OnDataReceived);
        isEndClientListener = false;
        clientListener.Start();
    }

我不知道这里有什么问题 . 希望你能告诉我什么是错的 .

2 回答

  • 1

    您的问题可能与代码无关 . 为了让网络外的其他人能够连接到您,您需要在路由器上移植您正在连接的端口 . 你可以找到很多教程here . 您还可以通过this工具检查您的连接是否已打开 .

    来自维基百科:

    端口转发允许远程计算机(例如,Internet上的计算机)连接到专用局域网(LAN)内的特定计算机或服务 .

    您必须允许通过路由器的连接才能连接到聊天服务器 .

  • 0

    您需要为计算机提供公共IP地址(可能是您的路由器有此选项)或在路由器上实现端口转发 .

    公共IP地址将是您的路由器之一 . 看看这个网站,找出你的公共IP whatismyipaddress.com . 您的路由器可以支持也可以不支持将其公共IP地址提供给您的计算机,但是,您的路由器应该能够进行端口转发 . (将数据从特定端口转发到特定计算机,因此当有人连接到您的公共IP时 . 例如 93.93.93.93:3333 将被转发到您的PC . )

相关问题