2010-08-14 28 views
1

J'essaie d'utiliser un composant nommé A C# IP Address Control mais il a un problème je pense. parce que quand j'augmente sa valeur 1, cela me donne un mauvais résultat. par exempleen utilisant le composant d'adresse IP C#

ipAddressControl3.Text = "192.168.1.25"; 
IPAddress ipAddress1 = new IPAddress(ipAddressControl3.GetAddressBytes()); 
ipAddress1.Address++; 
MessageBox.Show(ipAddress1.ToString()); 

renvoie: "193.168.1.25"! mais je m'attends à "192.168.1.26"

quel est le problème?

est ici le lien de composants: A C# IP Address Control

modifier: solution Peut-être comme this mais je ne pourrais pas implémenté ..

+0

duplication possible de [Comment utiliser IPAddress et IPv4Mask pour obtenir la plage d'adresses IP?] (Http://stackoverflow.com/questions/996848/how-to-use-ipaddress-and-ipv4mask-to-obtain-ip -adresse-gamme) –

Répondre

2

convertir mes ip big endian à peu comme ceci:

int ipaddress= IPAddress.NetworkToHostOrder(BitConverter.ToInt32(IPAddress.Parse(ipAddressControl3.Text).GetAddressBytes(), 0)); 

et ça marche.

1

adresse IP sont stockés dans l'ordre des octets réseau (big-endian), alors que les entiers sur Intel les plates-formes sont little-endian.

+0

Hmm je vois, soo quelle est la solution? – Rapunzo

+0

Eh bien, un hack rapide pour incrémenter seulement le dernier octet est de remplacer '++' par '+ = 0x1 << 24'. –

+0

Je l'ai essayé mais dans cette situation il échoue .. ıpAddressControl3.Text = "0.0.0.255"; IPAddress ipAddress1 = nouvelle adresse IP (ıpAddressControl3.GetAddressBytes()); ipAddress1.Address + = 0x1 << 24; MessageBox.Show (ipAddress1.ToString()); rediffusion est: 0.0.0.0 – Rapunzo

1

Essayez ceci:

ipAddressControl3.Text = "192.168.1.25"; 

byte[] ip = ipAddressControl3.GetAddressBytes(); 
ip[3] = (byte) (++ip[3]); 

IPAddress ipAddress1 = new IPAddress(ip); 
MessageBox.Show(ipAddress1.ToString()); 
+0

malheureusement, il donne 0.0.0.0 résultat pour 0.0.0.255 Je m'attends à ce qu'il doit être 0.0.1.0 – Rapunzo