C# - 是否可以将TCP IP数据包发送到我自己的外部IP进行服务器测试?

时间:2016-10-25 00:39:04

标签: c# networking tcp

我正在创建一个简单的服务器应用程序,以便向在特定时间连接的所有客户端发送消息。基本上,我启动一个服务器,它抓住它的内部IP和端口并监听。然后在客户端上,他们连接到我的路由器外部IP和端口,并发送一个TCP包。问题是这样,我的客户端应用程序永远无法成功发送数据包。它超时了。

以下是服务器的代码:

...
        try
        {
            server_listener = new TcpListener(IPAddress.Parse(192.168.0.xxx), 5000);
            server_listener.Start();
            isRunning = true;
            Console.WriteLine("[{0}] The server is now listening for all clients!", DateTime.Now);
            Listen();
        }

...



    void Listen()  // Listen to incoming connections.
    {
        while (isRunning)
        {
            TcpClient tcpClient = server_listener.AcceptTcpClient();  // Accept incoming connection.

            (new Thread(() => SetupAndListen(tcpClient))).Start(); //handle in a new thread
        }
    }

和客户:

    //attempt to connect once...
    string textToSend = "CA";

    try
    {
        //---create a TCPClient object at the IP and port no.---
        TcpClient client = new TcpClient(EXTERNAL_SERVER_IP, 5000);
        NetworkStream nwStream = client.GetStream();
        byte[] bytesToSend = ASCIIEncoding.ASCII.GetBytes(textToSend);


        //---and see if connected---
        nwStream.Write(bytesToSend, 0, bytesToSend.Length);

        //---read back the text---
        byte[] bytesToRead = new byte[client.ReceiveBufferSize];
        int bytesRead = nwStream.Read(bytesToRead, 0, client.ReceiveBufferSize);
        Debug.Log("Received : " + Encoding.ASCII.GetString(bytesToRead, 0, bytesRead));
        client.Close();
    }
    catch { }

服务器运行正常,没有错误,并且看起来正在我从调试器中看到的内容中正常收听,但我的客户端都没有工作。此外,如果EXTERNAL_SERVER_IP更改为localhost,或192.168.0.xxx,则确实有效。有什么想法发生了什么?

请注意,端口5000确实已被转发。

1 个答案:

答案 0 :(得分:1)

您是否尝试使用外部IP从网络内部向服务器发送数据包?这不适用于许多SoHo路由器。您要求的路由器功能称为NAT Loopback。