2010-09-16 3 views
11

Bei Verwendung einer Socket-Klasse baut man eine TCP-Verbindung zu einem Server auf einem Port auf, aber auf dem Server kann der ServerSocket mehrere Clientverbindungen für jede Annahmeanforderung verarbeiten und an einen Thread delegieren, um die Anforderung zu bedienen. Aber wie ist es möglich, dass eine ServerSocket-Klasse mehrere TCP-Verbindungen am selben Port akzeptiert?Wie bedient die Serversocket-Klasse mehrere Clientverbindungen auf demselben Port?

Bedeutet es, dass es dem Betriebssystem obliegt, zu entscheiden, wie viele Verbindungen es erlaubt oder wie viel Backlog maximal erlaubt ist und dies von Anwendungen über OS gesteuert werden kann (dh Java wird durch den maximalen Backlog von OS) und gibt es irgendwelche Privilegien für Backlog-Verbindungen in der TCP-Spezifikation?

Bester reagards,
Keshav

+0

zum Beispiel anzeigen [diese Antwort] (http://stackoverflow.com/questions/3638953/do-tcp-connections-get-moved-to-another-port-after-the-are-opened/3639017#3639017) auf Stackoverflow. –

Antwort

8

Eine TCP-Verbindung durch einen einzigartigen Satz von (Quell-IP, Quell-Port, Ziel-IP, dest Port) definiert ist. Da der Server an einen bestimmten Port gebunden ist, definiert er zwei dieser 4 Variablen. Solange die Clients alle von verschiedenen IPs und/oder verschiedenen Ports kommen, ist das kein Problem.

Und ja, das Betriebssystem kann steuern, wie viele Verbindungen insgesamt erlaubt sind, und Ihr Programm kann das noch weiter einschränken.

+0

Bedeutet das, dass wir tatsächlich * unbegrenzte * Verbindungen haben können und nicht nur 65k? – Pacerier

+0

Nicht unbegrenzt, aber das Auslaufen von IP/Sport/D-Combos wird nicht der limitierende Faktor sein. – zigdon

+0

Stimmt es, dass ein Computer, der versucht, sich selbst zu verbinden, eine theoretische Grenze von 65536 * 65536 = 4294967296 Verbindungen zu sich selbst haben kann? Oder habe ich meine Mathematik durcheinander gebracht. – Pacerier

-1

Das Betriebssystem, auf dem der Server ausgeführt wird, verwendet die Remote-Port-Nummer, um zwischen den verschiedenen Verbindungen zum Server zu unterscheiden.

+0

Es verwendet das 4-Tupel. – EJP

3

Es dient mehrere Clients und Sie können auswählen, wie viele Clients Sie gleichzeitig behandeln werden.

Eine Verbindung (auch bekannt als ein Socket zwischen einem Client und einem Server nicht nur durch den ServerIP/Server identifiziert ist, wird er identifiziert mit ClientIP/Clientport/ServerIP/Server.

Sie nur Verbindungen akzeptieren müssen (und in der Regel behandeln sie in verschiedenen Threads).


der Rückstau Größe 50 ist standardmäßig, aber Sie können es, wenn Sie Ihre ServerSocket erstellen.

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

Ressourcen:

+0

Ich glaube nicht, dass Sie das "Backlog" kontrollieren können, Sie können es angeben, aber nicht kontrollieren, wenn Sie denken, dass das zweite Argument des Konstruktors funktioniert, dann können Sie sich diese Frage von mir - http ansehen ://Paketüberfluss.com/questions/41309474/having-issue-mit-test-backlog-as-per-server-socketint-port-int-backlog – hagrawal

Verwandte Themen