Frage

Ich verwende Java ServerSocket -Klasse für die Serveranwendung. Beteiligt sich Accept () Methode am TCP/IP -Handshake?

Wie ich in TCP/IP -Dump und aus dem Befehl netstat sehe, stellen Clients Verbindungen her, mit denen die Akzeptanzmethode aufgerufen wird und ein Socket -Objekt zurückgibt.

Ist es Java -Ausgabe oder ich verstehe Akzeptanzsemantik nicht?

War es hilfreich?

Lösung

Im Allgemeinen in Unix beginnt das Betriebssystem, die Verbindungen zu akzeptieren, wenn Sie die Socket mit Hören () markieren. Wenn Sie die Funktion Accept () aufrufen, übergibt das Betriebssystem einfach die bereits geöffnete Verbindung. Hören nimmt einen Parameter mit, mit dem Sie angeben können, wie viele "nicht akzeptierte" offene Verbindungen das Betriebssystem zulässt (dh die Größe der Warteschlange).

Andere Tipps

Das accept Die Methode beteiligt sich nicht aktiv am Handschlag an sich. Das Senden und Empfangen der Nachrichten wird im TCP/IP -Protokollstapel implementiert, normalerweise im OS -Kernelraum.

Allerdings die accept() Die Methode ist in dem Gefühl beteiligt, dass der TCP/IP-Stack die Syn-ACK-Nachricht nur sendet, wenn ein Prozess einen hat accept() Rufen Sie aktiv für einen Socket an, der mit der entsprechenden IP -Adresse und dem entsprechenden Port gebunden ist. Wenn der Drei-Wege-Händedruck abgeschlossen ist, ist die accept() Methodenaufruf wird abgeschlossen.

Wenn kein Prozessanrufe accept() Mit der Zeit wird die eingehende SYN -Nachricht vom Kernel fallen gelassen und der Remote -Client wird schließlich den Verbindungsversuch einstellen. (Andererseits wird der Kernel wahrscheinlich mit einem ersten antworten, wenn die IP -Adresse / der IP -Anschluss nicht gebunden ist, und der Remote -Client wird eine "Verbindung abgelehnt" sehen.)

Akzeptieren Sie Rücksendungen erst, nachdem Client und Server verbunden sind (Handshake usw.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top