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를 추가()' 'Main' 메소드의 마지막 줄로. – dotctor

+0

마스크가 계산되면 프로세스가 종료되기 때문입니다. 'Console.WriteLine (net); 뒤에'Console.Readline();'을 추가하면된다. – Benj

답변

0

키 누르기

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

왜 downvote 남자? 설명 좀 해줘? – Mostafiz

+1

나는 downvote하지 않았지만, 질문은 대답이 아닌 중복으로 표시되어야하기 때문에 가장 좋은 추측은 될 것입니까? (또는 어쩌면 답을 얻는 것 이외에) 나는 그것에 대한 예의가 불분명하다. – Kritner

+0

@Kritner하지만 누구도 아직 가까운 표를주지 않음 – Mostafiz

-2

(a Console.ReadLine 추가)하기위한 프로그램을 대기하는 주 방법의 끝에 추가 Console.ReadKey(); Main 함수의 끝까지. 그러면 응용 프로그램이 사용자가 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(); 
    } 
+0

건설적인 무엇인가를 내놓은 모두는이 똑같은 해결책의 변형을 제안했지만 분명히 모든 사람들이 트롤 랜드에서 틀렸다. 누군가가 제안하고 싶지 않은 새로운 콘솔 앱 디자인 패러다임이 있습니까? –

관련 문제