Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';不要向远方的机器发送信息_C#_.net_Udp_Chat - Fatal编程技术网

C# Can';不要向远方的机器发送信息

C# Can';不要向远方的机器发送信息,c#,.net,udp,chat,C#,.net,Udp,Chat,我正在尝试使UDP客户端和UDP服务器通过Internet在两台远程计算机之间发送消息 服务器代码为: public class Server { private static void Main(string[] args) { var t = new Thread(new ThreadStart(Listen)); t.Start(); } private static void Listen() { UdpClie

我正在尝试使UDP客户端和UDP服务器通过Internet在两台远程计算机之间发送消息

服务器代码为:

public class Server {

    private static void Main(string[] args) {
        var t = new Thread(new ThreadStart(Listen));
        t.Start();
    }

    private static void Listen() {
        UdpClient server = new UdpClient(5035);

        while(true) {
            IPEndPoint client = null;
            Console.WriteLine("Waiting for a message...");

            // listening
            byte[] data = server.Receive(ref client);
            Console.WriteLine("Message received from {0}:{1}.", client.Address, client.Port);

            string message = Encoding.Default.GetString(data);
            Console.WriteLine("-> {0}\n", message);
        }
    }
}
客户端代码为:

public class Client {

    private static void Main(string[] args) {
        while(true) {
            Console.Write("\nEnter a message : ");
            string message = Console.ReadLine();

            // serialization
            byte[] msg = Encoding.Default.GetBytes(message);

            // sending
            UdpClient udpClient = new UdpClient();
            udpClient.Send(msg, msg.Length, "127.0.0.1", 5035);
            udpClient.Close();
        }
    }
}
如果我在同一个网络上运行服务器和客户机,或者在同一台计算机上运行这两个服务器和客户机,那么它们都能正常工作。当客户端和服务器位于两个远程网络上时,就会出现问题

为了尝试这一点,我将客户端代码发送给一位朋友,并给他我的网箱IP地址,我的网箱接收所有消息,但我不接收,唯一可行的方法是添加一个内部NAT-Box规则: 我对我的邮箱说,将端口5035上的所有消息重定向到同一端口上的我的计算机,现在它可以工作了


但是我不想用这种方式。是否有任何解决方案可以在两个远程网络上的两台远程计算机之间通过Internet发送UDP消息,而无需添加内部NAT盒规则?(可能使用子网掩码?

您需要路由器上的NAT规则

消费者路由器在默认情况下阻止所有传入流量,就像基本防火墙一样。 安装NAT规则会打开路由器上的端口,并通过internet授予对该端口的访问权限

这被认为是保护远程位置的良好实践。 在开发网络应用程序时,您需要考虑防火墙。 互联网是一个“邪恶”的环境,没有任何安全的开放网络是黑客的梦想