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

时间:2014-04-26 16:44:38

标签: c# .net winforms chat

我正在构建一个C#聊天程序,但我遇到了外部连接问题。 当同一台计算机同时连接服务器和客户端时,似乎没有问题,但是当我尝试在一台计算机上托管连接时,另一台计算机无法作为客户端连接。 这是相关的代码: 类服务器:         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 个答案:

答案 0 :(得分:1)

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

来自维基百科:

  

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

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

答案 1 :(得分:0)

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

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