Utilizzo di un socket server sincrono
I socket server sincroni consentono di sospendere l'esecuzione dell'applicazione finché non viene ricevuta una richiesta di connessione sul socket. L'utilizzo dei socket server sincroni non è adatto alle applicazioni le cui operazioni richiedono un utilizzo intensivo delle risorse di rete, mentre può essere vantaggioso per semplici applicazioni di rete.
Una volta impostata per attendere su un endpoint mediante i metodi Bind e Listen, una classe Socket è pronta ad accettare le richieste di connessione in entrata utilizzando il metodo Accept. L'applicazione viene sospesa finché non viene ricevuta una richiesta di connessione quando viene chiamato il metodo Accept.
Al momento della ricezione di una richiesta di connessione, Accept restituisce una nuova istanza di Socket associata al client che tenta la connessione. Nell'esempio riportato di seguito i dati vengono letti dal client, visualizzati nella console e restituiti al client. Poiché nella classe Socket non si specifica alcun protocollo di messaggistica, la stringa "<EOF>" contrassegna la fine dei dati del messaggio. Nell'esempio si presuppone che un Socket denominato listener
sia stato inizializzato e associato a un endpoint.
Console.WriteLine("Waiting for a connection...")
Dim handler As Socket = listener.Accept()
Dim data As String = Nothing
While True
bytes = New Byte(1024) {}
Dim bytesRec As Integer = handler.Receive(bytes)
data += Encoding.ASCII.GetString(bytes, 0, bytesRec)
If data.IndexOf("<EOF>") > - 1 Then
Exit While
End If
End While
Console.WriteLine("Text received : {0}", data)
Dim msg As Byte() = Encoding.ASCII.GetBytes(data)
handler.Send(msg)
handler.Shutdown(SocketShutdown.Both)
handler.Close()
[C#]
Console.WriteLine("Waiting for a connection...");
Socket handler = listener.Accept();
String data = null;
while (true) {
bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes,0,bytesRec);
if (data.IndexOf("<EOF>") > -1) {
break;
}
}
Console.WriteLine( "Text received : {0}", data);
byte[] msg = Encoding.ASCII.GetBytes(data);
handler.Send(msg);
handler.Shutdown(SocketShutdown.Both);
handler.Close();
Vedere anche
Utilizzo di un socket server asincrono | Esempio di socket server sincrono | Attesa mediante socket