C# 当我运行程序时,控制台窗口立即关闭

C# 当我运行程序时,控制台窗口立即关闭,c#,ip-address,subnet,C#,Ip Address,Subnet,它只是一个简单的IP掩码计算器,但当我运行程序时,我希望它显示广播和网络地址,但当我运行它时,窗口立即关闭。有人能告诉我我做错了什么吗 namespace ConsoleApplication5 { public static class Project3 { static void Main(string[] args) { Console.WriteLine("Hello");

它只是一个简单的IP掩码计算器,但当我运行程序时,我希望它显示广播和网络地址,但当我运行它时,窗口立即关闭。有人能告诉我我做错了什么吗

    namespace ConsoleApplication5
    {
       public static class Project3
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello");
            var ip1 = IPAddress.Parse("192.168.0.1");
            var ip2 = IPAddress.Parse("192.168.1.40");
            var mask = IPAddress.Parse("255.255.255.0");
            bool inSameNet = ip1.IsInSameSubnet(ip2, mask);
            IPAddress broadcast = GetBroadcastAddress(ip2, mask);
            IPAddress net = GetNetworkAddress(ip2, mask);
            Console.WriteLine(broadcast);
            Console.WriteLine(net);
        }
        public static IPAddress GetBroadcastAddress(this IPAddress address, IPAddress subnetMask)
        {
            byte[] addressBytes = address.GetAddressBytes();
            byte[] subnetMaskBytes = subnetMask.GetAddressBytes();

            if (addressBytes.Length != subnetMaskBytes.Length)
                throw new ArgumentException("No Match.");

            byte[] broadcastAddress = new byte[addressBytes.Length];
            for (int i = 0; i < broadcastAddress.Length; i++)
            {
                broadcastAddress[i] = (byte)(addressBytes[i] | (subnetMaskBytes[i] ^ 255));
            }
            return new IPAddress(broadcastAddress);
        }

        public static IPAddress GetNetworkAddress(this IPAddress address, IPAddress subnetMask)
        {
            byte[] netAddressBytes = address.GetAddressBytes();
            byte[] subnetMaskBytes = subnetMask.GetAddressBytes();

            if (netAddressBytes.Length != subnetMaskBytes.Length)
                throw new ArgumentException("No match.");

            byte[] broadcastAddress = new byte[netAddressBytes.Length];
            for (int i = 0; i < broadcastAddress.Length; i++)
            {
                broadcastAddress[i] = (byte)(netAddressBytes[i] & (subnetMaskBytes[i]));
            }
            return new IPAddress(broadcastAddress);
        }

        public static bool IsInSameSubnet(this IPAddress address2, IPAddress address, IPAddress subnetMask)
        {
            IPAddress network1 = address.GetNetworkAddress(subnetMask);
            IPAddress network2 = address2.GetNetworkAddress(subnetMask);

            return network1.Equals(network2);
        }
    }
}
在main方法的末尾添加Console.ReadKey,使程序等待按键

static void Main(string[] args)
    {
        Console.WriteLine("Hello");
        var ip1 = IPAddress.Parse("192.168.0.1");
        var ip2 = IPAddress.Parse("192.168.1.40");
        var mask = IPAddress.Parse("255.255.255.0");
        bool inSameNet = ip1.IsInSameSubnet(ip2, mask);
        IPAddress broadcast = GetBroadcastAddress(ip2, mask);
        IPAddress net = GetNetworkAddress(ip2, mask);
        Console.WriteLine(broadcast);
        Console.WriteLine(net);
        Console.ReadKey();
    }

添加Console.ReadLine;直到你的主要功能结束。这将使应用程序等待用户按enter键

static void Main(string[] args)
    {
        Console.WriteLine("Hello");
        var ip1 = IPAddress.Parse("192.168.0.1");
        var ip2 = IPAddress.Parse("192.168.1.40");
        var mask = IPAddress.Parse("255.255.255.0");
        bool inSameNet = ip1.IsInSameSubnet(ip2, mask);
        IPAddress broadcast = GetBroadcastAddress(ip2, mask);
        IPAddress net = GetNetworkAddress(ip2, mask);
        Console.WriteLine(broadcast);
        Console.WriteLine(net);
        Console.ReadLine();
    }

这是正常行为,请尝试添加控制台。请在这一行“Console.writeLine”之后读取`按Ctrl+F5或添加Console.ReadLine作为Main方法的最后一行。因为一旦计算了掩码,进程将终止。只需添加一个控制台;在你的控制台之后;为什么要投票给这个人?给出一些解释?我没有投反对票,但我最好的猜测是因为这个问题应该标记为重复而不是回答?或者除了被回答之外?我不清楚这种礼节是怎么回事。@Kritner,但没有人投赞成票,是的,Dottor链接了一个相关的帖子,但是的,我不知道这和其他答案的所有反对票是怎么回事谢谢,这很有魅力,我还是个新手,每个人都提出了一些建设性的建议,提出了相同解决方案的变体,但显然在巨魔之地,每个人都错了。有没有我不知道有人会提出的新的控制台应用程序设计范例?