23. december 2005 - 12:43
Der er
12 kommentarer og 2 løsninger
string til byte (IP adresse)
Hej og god jul til alle! Jeg har en lille form med 4 textbox'e. I de 4 box'e indtaster brugeren 4 tal, der tilsammen danner en IP adresse. Indtastningen skal jeg have valideret og skrevet ned i Windows' hosts fil. Spørgsmål: Hvordan får jeg smartest valideret de 4 strings og lavet dem til en IP string? Jeg har følgende kode, men synter ikke det virker særlig genialt: private void buttonOK_Click(object sender, System.EventArgs e) { Cursor.Current = Cursors.WaitCursor; bool success = this.CheckIPAddress(); if(success) { string addressString = this.textBoxIP1.Text+"."; addressString += this.textBoxIP2.Text+"."; addressString += this.textBoxIP3.Text+"."; addressString += this.textBoxIP4.Text; System.IO.StreamWriter fileWriter = new System.IO.StreamWriter(@"C:\WINDOWS\system32\drivers\etc\hosts",true); fileWriter.WriteLine(addressString + " myserver"); fileWriter.Close(); this.Close(); }//if Cursor.Current = Cursors.Default; } private bool CheckIPAddress() { byte checkByte = 0; bool success = true; try { checkByte = Convert.ToByte(this.textBoxIP1.Text); this.textBoxIP1.BackColor = Color.White; } catch { this.textBoxIP1.BackColor = Color.Red; success = false; } try { checkByte = Convert.ToByte(this.textBoxIP2.Text); this.textBoxIP2.BackColor = Color.White; } catch { this.textBoxIP2.BackColor = Color.Red; success = false; } try { checkByte = Convert.ToByte(this.textBoxIP3.Text); this.textBoxIP3.BackColor = Color.White; } catch { this.textBoxIP3.BackColor = Color.Red; success = false; } try { checkByte = Convert.ToByte(this.textBoxIP4.Text); this.textBoxIP4.BackColor = Color.White; } catch { this.textBoxIP4.BackColor = Color.Red; success = false; } return success; }
Annonceindlæg fra Conscia
23. december 2005 - 12:47
#1
IPAddress.Parse of catch FormatException måske
23. december 2005 - 12:52
#2
mmjaa - har nok skrevet for lidt til mit spørgsmål, men hvis du ser koden i min CheckIPAddress(), så gør jeg de "dårlige" tal røde - og det vil jeg gerne blive ved med.
23. december 2005 - 12:57
#3
Hvis du vil bibeholde at de enkelte bytes bliver røde individuelt så tror jeg ikke at du kan gøre det meget smartere
23. december 2005 - 13:03
#4
Brugte din Parse alligevel, og nøjes med at kalde CheckIPAddress() (nu RepaintTextBoxes()) når den smider en exception. private void buttonOK_Click(object sender, System.EventArgs e) { Cursor.Current = Cursors.WaitCursor; string addressString = this.textBoxIP1.Text+"."; addressString += this.textBoxIP2.Text+"."; addressString += this.textBoxIP3.Text+"."; addressString += this.textBoxIP4.Text; try { IPAddress.Parse(addressString); StreamWriter fileWriter = new StreamWriter(@"C:\WINDOWS\system32\drivers\etc\hosts",true); fileWriter.WriteLine(addressString + " funkiserver"); fileWriter.Close(); this.Close(); }//try catch { this.RepaintTextBoxes(); }//catch Cursor.Current = Cursors.Default; } private void RepaintTextBoxes() { try { Convert.ToByte(this.textBoxIP1.Text); this.textBoxIP1.BackColor = Color.White; } catch { this.textBoxIP1.BackColor = Color.Red; } try { Convert.ToByte(this.textBoxIP2.Text); this.textBoxIP2.BackColor = Color.White; } catch { this.textBoxIP2.BackColor = Color.Red; } try { Convert.ToByte(this.textBoxIP3.Text); this.textBoxIP3.BackColor = Color.White; } catch { this.textBoxIP3.BackColor = Color.Red; } try { Convert.ToByte(this.textBoxIP4.Text); this.textBoxIP4.BackColor = Color.White; } catch { this.textBoxIP4.BackColor = Color.Red; } } Smid du bare et svar :)
23. december 2005 - 13:28
#5
Den kan jo også næsten kun bruges :-) "0.168.32.1" tager den som en valid ip :-( // ouT
23. december 2005 - 13:32
#6
ja, men hvordan vil du ellers tjekke om IP'en er gyldig?
23. december 2005 - 13:37
#7
Well, der er jo nogle Ip'er der den tager som gyldige men hvor du skal bruge dem alligevel ikke kan bruges.... Der er vel ikke meget andet ned at lave lidt flere tests.... "192.168.32.0" // angiver et net "0.168.32.192" // kan ikke være 0 i første octet, da det angiver nettet "192.168.32.255" // en broadcast adresse Så jeg tror du må ind og test på de forskellige felter.... // ouT
23. december 2005 - 13:38
#8
Der er sikkert flere som ikke er gyldige... men kan ikke lige komme på dem.... det kommer jo også an på hvad subnet masken er...
23. december 2005 - 14:17
#9
Har siddet og fedtet lidt med det... Hvad med denne her? [code] private void buttonOK_Click(object sender, System.EventArgs e) { Cursor.Current = Cursors.WaitCursor; string addressString = this.textBoxIP1.Text + "." + this.textBoxIP2.Text + "." + this.textBoxIP3.Text + "." + this.textBoxIP4.Text; StreamWriter fileWriter = null; try { IPAddress.Parse(addressString); Dns.GetHostByAddress(addressString); fileWriter = new StreamWriter(@"C:\WINDOWS\system32\drivers\etc\hosts",true); fileWriter.WriteLine(addressString + " funkiserver"); fileWriter.Close(); this.Close(); }//try catch(FormatException) { this.ChangeTextBoxColors(); }//catch catch(System.Net.Sockets.SocketException) { MessageBox.Show(addressString + " is not a valid intra net IP address!","Invalid IP address"); }//catch catch { if(fileWriter != null) fileWriter.Close(); this.Close(); }//catch Cursor.Current = Cursors.Default; }//buttonOK_Click [/code] Hvis Dns.GetHostByAddress(addressString); smider en System.Net.Sockets.SocketException, er det vel fordi den ikke kan finde den. IP adressen der skal indtastes, er fra et lokalt netværk.
23. december 2005 - 14:31
#10
ja, det virker ikke helt dumt :-) Så er den vist også ved at være der. // ouT
23. december 2005 - 14:35
#11
ok :) - svarer I begge to, så kan I dele. Det er jo jul ;)
23. december 2005 - 14:36
#12
:-) svar
23. december 2005 - 15:30
#13
du skal lige være klar over hvad det test med Dns.GetHostByAddress gør det tester: (er der en DNS entry for den pågældende IP adresse) OR (maskinen er tilgængelig) hvilket muligvis er fint nok for dig, men det er ikke det samme som at teste for om en IP adresse er valid (maskiner uden navn som ikke er tilgængelige og ledige IP adresser vil give forskelligt resultat)
23. december 2005 - 15:30
#14
og et svar
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.