2011-09-21 167 views
1

我有一個需要通過UDP連接連接到另一臺計算機的c#程序。爲了執行此操作,我需要臨時更改我的計算機上網卡的IP地址,以便他們可以相互交談。我可以做到這一點很好。但是,當我完成後,我想將我的IP地址恢復到之前的狀態;即自動獲取IP地址。在C#中更改IP地址

有人可以告訴我如何改變我的設置回到他們以前?

感謝,

菲爾

+1

你能解釋一下爲什麼你在第一時間更改地址?無論我想象的IP地址如何,UDP都應該可用。 –

+0

你意識到當你這樣做時,任何正在運行的其他應用程序都會使連接斷開?如果最終用戶在運行應用程序的同時在另一個應用程序中進行處理,則這可能會很危險。 – tsells

回答

3

你可能要檢查這個項目SwitchNetConfig

,你是關心如何更改IP的部分:

public static void SetIP(string nicName, string IpAddresses, 
    string SubnetMask, string Gateway, string DnsSearchOrder) 
{ 
    ManagementClass mc = new ManagementClass(
    "Win32_NetworkAdapterConfiguration"); 
    ManagementObjectCollection moc = mc.GetInstances(); 

    foreach(ManagementObject mo in moc) 
    { 
    // Make sure this is a IP enabled device. 

    // Not something like memory card or VM Ware 

    if(mo["IPEnabled"] as bool) 
    { 
     if(mo["Caption"].Equals(nicName)) 
     { 

     ManagementBaseObject newIP = 
      mo.GetMethodParameters("EnableStatic"); 
     ManagementBaseObject newGate = 
      mo.GetMethodParameters("SetGateways"); 
     ManagementBaseObject newDNS = 
      mo.GetMethodParameters("SetDNSServerSearchOrder"); 

     newGate[ "DefaultIPGateway" ] = new string[] { Gateway }; 
     newGate[ "GatewayCostMetric" ] = new int[] { 1 }; 

     newIP[ "IPAddress" ] = IpAddresses.Split(','); 
     newIP[ "SubnetMask" ] = new string[] { SubnetMask }; 

     newDNS[ "DNSServerSearchOrder" ] = DnsSearchOrder.Split(','); 

     ManagementBaseObject setIP = mo.InvokeMethod( 
      "EnableStatic", newIP, null); 
     ManagementBaseObject setGateways = mo.InvokeMethod( 
      "SetGateways", newGate, null); 
     ManagementBaseObject setDNS = mo.InvokeMethod( 
      "SetDNSServerSearchOrder", newDNS, null); 

     break; 
     } 
    } 
    } 
} 
+0

這不適用於Win 7,似乎 – Kaitlyn