Newsgroup: it.comp.lang.visual-basic
Titolo: [!][.NET][LONG]Risoluzione Nomi/Indirizzi di Rete

.NET mette a disposizione il namespace System.Net (ed in particolare la
classe System.Net.DNS) che permette di effettuare la risoluzione di nomi da
indirizzi e viceversa.
Di seguito postero' tutti i possibili metodi (sincroni ed asincroni) di
effettuare le operazioni di risoluzione dei nomi/indirizzi.
Per provare il codice, inserire una TextBox multiline denominata Text1 in un
form, e tanti Button quante sono le sub, per provarle.
Gli esempi di seguito sono privi di controllo di errore, facilmente
implementabili con opportuni Try-Catch sulle chiamate ai metodi della classe
DNS. Inoltre ho spesso separato dichiarazione da inizializzazione, al fine
di aumentare la leggibilita' del codice.
Here we go!
-----
Nome da indirizzo:
- Versione sincrona (GetHostByAddress).
- La versione asincrona di questo metodo non esiste.
Private Sub SyncGetHostByAddress(ByVal address As String)
    Dim hostEntry As System.Net.IPHostEntry
    'Risolve l'indirizzo
    hostEntry = System.Net.Dns.GetHostByAddress(address)
    'Mostra il nome associato
    Text1.Text = hostEntry.HostName
End Sub
-----
Indirizzo da nome:
- Versione Sincrona (GetHostByName)
- Versione Asincrona (BeginGetHostByName/EndGetHostByName)
Private Sub SyncGetHostByName(ByVal hostName As String)
   Dim hostEntry As System.Net.IPHostEntry
   Dim addr As System.Net.IPAddress
   Text1.Text = String.Empty
   'Risolve il nome
   hostEntry = System.Net.Dns.GetHostByName(hostName)
   'Mostra gli indirizzi associati
   For Each addr In hostEntry.AddressList()
      Text1.Text &= addr.ToString & ControlChars.NewLine
   Next
End Sub
La versione asincrona si basa sull'utilizzo di una funzione di callback.
Private Sub AsyncGetHostByName(ByVal hostName As String)
   Dim ac As System.AsyncCallback = _
       New AsyncCallback(AddressOf AsyncGetHostByNameCallBack)
   Dim so As Object
   Text1.Text = String.Empty
   'Avvia la risoluzione del nome
   System.Net.Dns.BeginGetHostByName(hostName, ac, so)
End Sub
Private Sub AsyncGetHostByNameCallBack(ByVal asyncResult As
System.IAsyncResult)
   Dim hostEntry As System.Net.IPHostEntry
   Dim addr As System.Net.IPAddress
   'Legge il risultato di BeginGetHostByName
   hostEntry = System.Net.Dns.EndGetHostByName(asyncResult)
   'Mostra gli indirizzi associati
   For Each addr In hostEntry.AddressList()
       Text1.Text &= addr.ToString & ControlChars.NewLine
   Next
End Sub
-----
Risoluzione DNS:
- Versione Sincrona (Resolve)
- Versione Asincrona (BeginResolve/EndResolve)
La risoluzione DNS, a dispetto del nome del parametro dei metodi Resolve e
BeginResolve (ovvero hostName As String), permette di avere le informazioni
complete (nome e indirizzi) associati ad un nome *o* ad un indirizzo IP.
Cio' permette quindi di avere un'alternativa asincrona al GetHostByAddress
(nome da indirizzo).
Sincrona:
Private Sub SyncResolve(ByVal hostName As String)
   Dim hostEntry As System.Net.IPHostEntry
   Dim addr As System.Net.IPAddress
   Text1.Text = String.Empty
   'Risolve il nome o l'indirizzo
   hostEntry = System.Net.Dns.Resolve(hostName)
   'Mostra il nome
   Text1.Text &= hostEntry.HostName & ControlChars.NewLine
   'Mostra gli indirizzi associati
   For Each addr In hostEntry.AddressList()
       Text1.Text &= addr.ToString & ControlChars.NewLine
   Next
End Sub
Asincrona:
Private Sub AsyncResolve(ByVal hostNameOrAddress As String)
   Dim ac As New System.AsyncCallback(AddressOf AsyncResolveCallback)
   Dim so As Object
   Text1.Text = String.Empty
   'Avvia la risoluzione del nome o dell'indirizzo
   System.Net.Dns.BeginResolve(hostNameOrAddress, ac, so)
End Sub
Private Sub AsyncResolveCallback(ByVal asyncResult As System.IAsyncResult)
   Dim hostEntry As System.Net.IPHostEntry
   Dim addr As System.Net.IPAddress
   'Legge il risultato di BeginResolve
   hostEntry = System.Net.Dns.EndResolve(asyncResult)
   'Mostra il nome
   Text1.Text &= hostEntry.HostName & ControlChars.NewLine
   'Mostra gli indirizzi associati
   For Each addr In hostEntry.AddressList()
      Text1.Text &= addr.ToString & ControlChars.NewLine
   Next
End Sub
-----
Per completezza, l'ultimo metodo della classe DNS e' GetHostName che
restituisce il nome del computer locale.
Il suo uso e' estremamente semplice:
Private Sub SyncGetHostName()
   Text1.Text = System.Net.Dns.GetHostName()
End Sub
-----
Sperando di aver postato cosa gradita, attendo commenti!
Happy Coding =)
Lokar
--
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt

Sperando di aver postato cosa gradita, attendo commenti!
Ottimo lavoro, ti propongo per la nomina ad ADSL:
Assistenza Diretta Sviluppatori - Lokar
-- 
ciao, hal ;-)

 indirizzi e viceversa.
Perchè non lo invii al Sito Comune?
Ciao
--
' // Initialize the expression evaluator
Engines.Evaluator = CreateObject("
http://www.neodatatype.net
")
' // you can find resources for and from the NG here!
Me.SitoComune = "
http://www.it-lang-vb.net
"