C# 在局域网外使用TCP

C# 在局域网外使用TCP,c#,sockets,tcp,tcpclient,serversocket,C#,Sockets,Tcp,Tcpclient,Serversocket,我正在使用Microsoft提供的示例来学习如何在C#中使用TCP服务器。对于TCPListener,我使用这个,对于TCPCLient,我使用这个(示例在页面底部) 到目前为止,我已经设法连接并发送消息到其他连接到同一路由器的电脑。我现在想要的是将它连接到局域网外的PC上。我该怎么做 我还应该提到,这是我在LAN中连接PC的方式: 在服务器端: public string LocalIPAddress() { IPHostEntry host;

我正在使用Microsoft提供的示例来学习如何在C#中使用TCP服务器。对于TCPListener,我使用这个,对于TCPCLient,我使用这个(示例在页面底部)

到目前为止,我已经设法连接并发送消息到其他连接到同一路由器的电脑。我现在想要的是将它连接到局域网外的PC上。我该怎么做

我还应该提到,这是我在LAN中连接PC的方式:

在服务器端:

    public string LocalIPAddress()
    {
        IPHostEntry host;
        string localIP = "";
        host = Dns.GetHostEntry(Dns.GetHostName());
        foreach (IPAddress ip in host.AddressList)
        {
            if (ip.AddressFamily == AddressFamily.InterNetwork)
            {
                localIP = ip.ToString();
                break;
            }
        }
        return localIP;
    }

    private void Form1_Load(object sender, EventArgs e)
    {


        TcpListener server = null;
        try
        {
            // Set the TcpListener on port 13000.
            Int32 port = 13000;
            String localAddrString = LocalIPAddress();
            Console.WriteLine(localAddrString);

            IPAddress localAddr = IPAddress.Parse(localAddrString);

// TcpListener server = new TcpListener(port);
            server = new TcpListener(localAddr, port);

            // Start listening for client requests.
            server.Start();
} }

在客户端:

            Int32 port = 13000;

            String server = "192.168.X.X"; // here I manually introduce the IP provided     by the server in the console
            TcpClient client = new TcpClient(server, port);

我希望我能用一个简单的评论给你这个信息,但我不能,因为我只是最近才加入。如果您不知道如何使用端口检查器,您应该确保已转发端口(将帮助您转发端口),您可以使用此易于使用的端口检查器:。

没有区别。您只需使用要连接的主机的地址。只要该地址可以通过网络(intranet、internet,无所谓)路由,并且端口对目标主机开放,它就应该可以工作。“你试过了吗?”大卫,是的,我试过了,但没用。我使用了我的Ip,如图所示。在局域网内使用同一台PC可以工作,但在局域网外则不行。客户端和服务器之间的任何东西都可能阻塞连接。如果您试图从住宅连接外部连接到住宅连接内部,您需要特别检查路由器和电缆/dsl/等硬件上的端口是否打开。我怎么能检查呢?最好是以编程方式?除非您的路由器有一个可以连接的API,否则它可能是手动配置的。这实际上已不再是一个关于代码的问题,而是一个关于网络配置的问题。