Condividi tramite


Attesa mediante socket

I socket listener o i socket server consentono di aprire una porta nella rete e di attendere la connessione di un client a tale porta. Per quanto esistano altre famiglie di indirizzi di rete e altri protocolli, in questo esempio viene presa in considerazione la creazione di un servizio remoto per una rete TCP/IP.

L'indirizzo univoco di un servizio TCP/IP viene definito tramite la combinazione dell'indirizzo IP dell'host con il numero di porta del servizio, al fine di creare un endpoint per il servizio stesso. Nella classe Dns sono disponibili metodi per la restituzione di informazioni sugli indirizzi di rete supportati dalla periferica di rete locale. Se la periferica di rete locale dispone di più indirizzi di rete o il sistema locale supporta più periferiche di rete, tramite la classe Dns verranno restituite informazioni su tutti gli indirizzi di rete, tra cui sarà necessario scegliere quello adatto al servizio. È 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 http://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.

Nell'esempio che segue viene creata una classe IPEndPoint per un server combinando il primo indirizzo IP restituito dalla classe Dns per il computer host con un numero di porta compreso nell'intervallo dei numeri di porta registrati.

Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)
Dim localEndPoint As New IPEndPoint(ipAddress, 11000)

[C#]
IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
IPAddress ipAddress = ipHostInfo.AddressList[0];
IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

Una volta determinato l'endpoint locale, la classe Socket deve essere associata a tale endpoint mediante il metodo Bind e impostata per attendere sull'endpoint mediante il metodo Listen. Se la combinazione di indirizzo e porta specificata è già in uso, il metodo Bind genererà un'eccezione. Nell'esempio riportato di seguito viene illustrata l'associazione di una classe Socket con una classe IPEndPoint.

listener.Bind(localEndPoint)
listener.Listen(100)
[C#]
listener.Bind(localEndPoint);
listener.Listen(100);

Dal metodo Listen viene accettato un unico parametro in cui è specificato il numero di connessioni a Socket in sospeso consentite prima che venga restituito un errore di server occupato al client da cui è stata tentata la connessione. Nel caso considerato vengono inseriti nella coda di connessione fino a 100 client prima che una risposta di server occupato venga restituita al client numero 101.

Vedere anche

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