Condividi tramite


Utilizzo di socket client

Prima di iniziare una comunicazione tramite un Socket è necessario creare una pipe di dati tra l'applicazione e la periferica remota. Per quanto esistano altre famiglie di indirizzi di rete e altri protocolli, in questo esempio viene presa in considerazione la creazione di una connessione TCP/IP a un servizio remoto.

Nel protocollo TCP/IP per identificare in modo univoco un servizio si utilizza un indirizzo di rete e il numero di porta del servizio: con l'indirizzo di rete si identifica una specifica periferica presente sulla rete, mentre con il numero di porta si identifica lo specifico servizio fornito dalla periferica e a cui dovrà essere effettuata la connessione. La combinazione dell'indirizzo di rete e della porta del servizio costituisce un endpoint, rappresentato in .NET Framework dalla classe EndPoint. Per ogni famiglia di indirizzi supportata viene definita una derivazione della classe EndPoint: per la famiglia di indirizzi IP si tratta della classe IPEndPoint.

La classe Dns consente di fornire servizi DNS alle applicazioni che utilizzano servizi Internet basati su TCP/IP. Tramite il metodo Resolve si richiede a un server DNS l'esecuzione del mapping di un nome descrittivo di dominio, quale "host.contoso.com", rispetto a un indirizzo Internet numerico, quale 192.168.1.1. Viene quindi restituita una classe IPHostEnty in cui è contenuto un elenco degli indirizzi e degli alias per il nome richiesto. Nella maggior parte dei casi è possibile utilizzare il primo indirizzo restituito nella matrice AddressList. Mediante il codice riportato di seguito si ottiene una classe IPAddress in cui è contenuto l'indirizzo IP del server host.contoso.com.

Dim ipHostInfo As IPHostEntry = Dns.Resolve("host.contoso.com")
Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)

[C#]
IPHostEntry ipHostInfo = Dns.Resolve("host.contoso.com");
IPAddress ipAddress = ipHostInfo.AddressList[0];

È l'autorità IANA (Internet Assigned Numbers Authority) che definisce i numeri di porta per i servizi comuni. Per ulteriori informazioni, visitare il relativo sito Web all'indirizzo www.iana.org/assignments/port-numbers (informazioni in lingua inglese). Per gli altri servizi possono essere registrati numeri di porta compresi tra 1.024 e 65.535. Mediante il codice riportato di seguito l'indirizzo IP di host.contoso.com viene combinato con un numero di porta per creare un endpoint remoto per una connessione.

Dim ipe As New IPEndPoint(ipAddress, 11000)

[C#]
IPEndPoint ipe = new IPEndPoint(ipAddress,11000);

Una volta determinato l'indirizzo della periferica remota e scelta una porta da utilizzare per la connessione, si può tentare di stabilire una connessione con la periferica remota. Nell'esempio di codice che segue viene utilizzata una classe IPEndPoint esistente per stabilire una connessione a una periferica remota e vengono intercettate tutte le eccezioni generate.

Try
    s.Connect(ipe)
Catch ae As ArgumentNullException
    Console.WriteLine("ArgumentNullException : {0}", _
        ae.ToString())
Catch se As SocketException
    Console.WriteLine("SocketException : {0}", se.ToString())
Catch e As Exception
    Console.WriteLine("Unexpected exception : {0}", e.ToString())
End Try

[C#]
try {
    s.Connect(ipe);
} catch(ArgumentNullException ae) {
    Console.WriteLine("ArgumentNullException : {0}", ae.ToString());
} catch(SocketException se) {
    Console.WriteLine("SocketException : {0}", se.ToString());
} catch(Exception e) {
    Console.WriteLine("Unexpected exception : {0}", e.ToString());
}

Vedere anche

Utilizzo di un socket client sincrono | Utilizzo di un socket client asincrono | Creazione di socket | Socket