¿Pueden múltiples clientes utilizar simultáneamente el socket de un servidor?

El puerto de un servidor puede ser utilizado por muchos clientes (conexiones). El puerto de un cliente puede ser utilizado por una sola conexión. La razón es que un puerto puede ser utilizado por un solo proceso, que asigna el puerto (haciendo “enlace” como un servidor que escuchará ese puerto para las conexiones entrantes, o haciendo una especie de “abrir” como un cliente que quiere hacer una salida conexiones desde ese puerto). En ocasiones, se utilizan las nociones de “socket de servidor” y “socket de cliente”, y de hecho, Java ServerSocket crea un socket específico de conexión para cada conexión entrante aceptada, que representará un descriptor de archivo por sí mismo.

Resumen:

  • 1 puerto puede ser utilizado por 0 o 1 proceso
  • cada conexión tcp abrirá un “archivo”, “descriptor”, “socket” en ambos extremos
  • un puerto puede usarse solo para salida o entrada
    • saliente significa un cliente que desea conectarse a un servidor
    • entrante significa que un servidor escucha las solicitudes de conexiones para aceptarlas y crear múltiples conexiones TCP
  • un puerto puede tener 0 o 1 conexiones cuando se abre como cliente
  • un puerto de escucha (puerto del servidor) puede tener 0 o muchas conexiones establecidas
  • una conexión tcp es la tupla: (host del cliente, puerto del cliente, host del servidor, puerto del servidor)
    • puede ver que un puerto del servidor puede corresponder a muchas conexiones
    • un puerto de cliente no se puede reutilizar para otras conexiones, incluso si lo solicita el mismo proceso (a menos que se utilicen protocolos de multiplexación)

Un socket es un punto final de una conexión. Se identifica mediante una tupla de 2 (IP, puerto). Una conexión se identifica mediante una tupla 4 (IP del cliente, puerto del cliente, IP del servidor, puerto del servidor). Si alguno de estos es diferente, será una conexión diferente. En este caso, dado que los clientes son diferentes, varios clientes pueden conectarse al mismo socket del servidor

Sí, y esto es algo que los servidores ya hacen. Un servidor puede servir a varios clientes usando el mismo puerto, ya que puede eliminar el miliplex (reconocer diferentes flujos) en función de la dirección IP y el puerto del cliente (el socket en el cliente).

Los puertos son una forma de multiplexar direcciones IP para que diferentes aplicaciones puedan escuchar en el mismo par de dirección IP / protocolo. A menos que una aplicación defina su propio protocolo de nivel superior, no hay forma de multiplexar un puerto. Si dos conexiones que usan el mismo protocolo tienen direcciones IP de origen y destino idénticas y puertos de origen y destino idénticos, deben ser la misma conexión. Por lo tanto, varios clientes que usan el mismo protocolo pueden usar el mismo socket del servidor aparentemente de subprocesos múltiples.

Sí, puede crear un socket de servidor que pueda manejar múltiples clientes simultáneamente. Esto se hace haciendo que el socket de escucha bifurque () un proceso secundario cada vez que se produce una solicitud del cliente y este proceso secundario se conectará al cliente actuando como un servidor y por lo tanto, esto se convierte en un socket conectado, mientras que un socket de escucha principal siempre maneja otros clientes.

Consulte el enlace para más información.

Servidor multicliente con fork ()

Por supuesto, varios clientes pueden usar un socket simultáneamente (interpretarlo como subprocesos), por eso usamos socket, ¿verdad?

Si quiso decir ‘proceso’ por ‘cliente’, entonces, no es posible, va en contra de TCP.

Debo decir, ve a través del siguiente enlace, tiene una muy buena explicación:

¿Cómo se conectan varios clientes simultáneamente a un puerto, digamos 80, en un servidor?

¡Espero eso ayude!