Usar un socket de servidor sincrónico

Los sockets de servidor sincrónico suspenden la ejecución de la aplicación hasta que se recibe una solicitud de conexión en el socket. Los sockets de servidor sincrónico no son adecuados para las aplicaciones que hacen un uso intensivo de la red durante su funcionamiento, pero pueden ser adecuados para las aplicaciones de red simple.

Una vez establecido un Socket para que escuche en un punto de conexión mediante los métodos Bind y Listen, estará listo para aceptar solicitudes de conexión entrantes mediante el método Accept. La aplicación se suspende hasta que se recibe una solicitud de conexión cuando se llama al método Accept.

Al recibir una solicitud de conexión, Accept devuelve una nueva instancia Socket que está asociada con el cliente que se conecta. En el ejemplo siguiente se leen los datos desde el cliente, se muestran en la consola y se devuelven al cliente. La clase Socket no especifica ningún protocolo de mensajería, por lo que la cadena "<EOF>" marca el final de los datos del mensaje. Se presupone que se ha inicializado y enlazado a un punto de conexión una clase Socket denominada listener.

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()  
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();  

Vea también