2010-09-16 13 views
11

Cuando se usa una clase Socket uno establece una conexión TCP a un servidor en algún puerto, pero en el servidor ServerSocket es capaz de manejar múltiples conexiones de cliente para cada solicitud de aceptación y delegarla en un hilo al servidor de la solicitud. Pero, ¿cómo es posible que una clase ServerSocket acepte múltiples conexiones tcp en el mismo puerto?¿Cómo funciona serversocket class para múltiples conexiones de cliente en el mismo puerto?

¿Significa que depende del sistema operativo decidir cuántas conexiones permite o cuál es la acumulación máxima permitida y esto puede ser controlado por aplicaciones sobre el sistema operativo (es decir, está restringido por el retraso acumulado máximo soportado por Sistema operativo) y ¿hay algún privilegio para las conexiones de retraso en la especificación de TCP?

mejores reagards,
Keshav

+0

Véase, por ejemplo [esta respuesta] (http://stackoverflow.com/questions/3638953/do-tcp-connections-get-moved-to-another-port-after-they-are-opened/3639017#3639017) en Stackoverflow. –

Respuesta

8

Una conexión TCP se define por un conjunto único de (IP de origen, puerto de origen, IP dest, puerto dest). Como el servidor se une a un puerto en particular, define dos de esas 4 variables. Siempre y cuando los clientes provengan de IP diferentes y/o diferentes puertos, no será un problema.

Y sí, el sistema operativo puede controlar cuántas conexiones totales están permitidas, y su programa puede restringir aún más.

+0

¿Significa que podríamos tener realmente * conexiones * ilimitadas y no solo 65k? – Pacerier

+0

No es ilimitado, pero quedarse sin combos de IP/deporte/dport no será el factor limitante. – zigdon

+0

¿Es cierto que una computadora que intenta conectarse a sí misma puede tener un límite teórico de 65536 * 65536 = 4294967296 conexiones consigo mismo? ¿O estropeé mis cálculos? – Pacerier

-1

El sistema operativo en el que se ejecuta el servidor utiliza el número de puerto remoto para distinguir entre las diversas conexiones al servidor.

+0

Utiliza la 4-tupla. – EJP

3

Sirve a varios clientes y puede elegir cuántos clientes manejará al mismo tiempo.

Una conexión (también conocido como un Socket entre un cliente y un servidor no sólo se identifica por el IPDeServidor/ServerPort, se identifica con IPCliente/ClientPort/IPDeServidor/ServerPort.

Sólo tiene que aceptar conexiones (y por lo general los tratan en diferentes hilos).


Por defecto, el tamaño de la cartera de pedidos es de 50, pero se puede establecer al crear su ServerSocket.

new ServerSocket(21, 100); //Create a server socket with a backlog of 100 

Recursos:

+0

No creo que pueda controlar el 'retraso acumulado', puede especificarlo pero no puede controlarlo, si cree que puede y el segundo argumento del constructor funciona, entonces puede echar un vistazo a esta pregunta mía: http ://desbordamiento de pila.com/questions/41309474/having-issue-with-testing-backlog-as-per-serversocketint-port-int-backlog – hagrawal

Cuestiones relacionadas