2016-10-18 2 views
1

Это простой калькулятор маски 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); 
     } 
    } 
} 
+0

это нормальное поведение, попробуйте добавить 'Console.Read()' после этой строки 'Console.WriteLine (нетто),' ' – MethodMan

+1

Нажмите Ctrl' +' F5' или добавить 'Console.ReadLine()' как последняя строка метода «Главная». – dotctor

+0

, потому что процесс завершается после вычисления масок. просто добавьте 'Console.Readline();' после 'Console.WriteLine (net);' – Benj

ответ

0

Добавить 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(); 
    } 
+3

Почему человек вниз? дать какое-то объяснение? – Mostafiz

+1

Я не спускал вниз, но мое лучшее предположение было бы потому, что вопрос должен быть помечен как дубликат, а не ответа? (или, может быть, помимо ответа?) Я не понимаю, как это делается. – Kritner

+0

@Kritner, но никто не дает открытого голосования – Mostafiz

-2

Добавить в Console.ReadLine(); до конца вашей основной функции. Это заставит приложение ждать, пока пользователь нажмет кнопку ввода.

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(); 
    } 
+0

Каждый, кто придумал что-то конструктивное, предложил варианты этого же решения, но, видимо, все здесь не так, как в Troll Land. Существуют ли новые парадигмы проектирования консольных приложений, о которых я не знаю, что кто-то хотел бы предложить? –

Смежные вопросы