Nehmen wir an, ich bin mit jemandem verbunden, der einen System.Net.Sockets.TcpClient verwendet. Ich sende ihnen eine Nachricht, dann rufe ich sofort TcpClient.Close(); Kann der andere Kunde die Nachricht erhalten? Ist das in den meisten TCP-Implementierungen auch richtig/falsch?TCP - Senden der Nachricht und Trennen der Verbindung
Antwort
Vlads Kommentar ist korrekt - die Lieferung kann nicht garantiert werden.
Angenommen, die TCP-Verbindung mit einem Peer ist hergestellt. Der Sendevorgang kopiert nur die Daten in den Netzwerkstapel im Betriebssystem, und es ist Aufgabe des Betriebssystems, sie zu senden. Die Sie rufen den Vorgang auf. OS hört nicht auf, die vorherigen Daten zu senden. OS verschiebt den Socket, bis Daten gesendet werden. Es ist vom Anwendungspunkt aus transparent.
Aber etwas falsches kann passieren. Der Peer kann abstürzen, das Netzwerk könnte ausfallen oder was auch immer. Obwohl das Betriebssystem versucht, Daten erneut zu übertragen, wenn TCP ACK nicht empfangen wird, kann die erneute Übertragung immer wieder fehlschlagen, bis OS aufgibt. Dieser allgemeine Mechanismus ist in allen Betriebssystemen, die das TCP-Protokoll implementieren, gleich.
Wenn Sie eine garantierte Zustellung benötigen, müssen Sie einen Mechanismus auf Anwendungsebene implementieren, um empfangene Daten zu bestätigen.
- 1. Senden der Nachricht über TCP in Swift
- 2. Trennen der Verbindung vom Server nach dem Senden der Datei
- 3. Wie TCP/IP-Socket-Verbindung programmgesteuert trennen?
- 4. Senden der Nachricht über TCP in Swift (NULL beendet)
- 5. TCP-Server wird ???????? anstelle der echten Nachricht
- 6. tcp nachricht kommunikation
- 7. Nachricht von TCP-Server in Erlang senden
- 8. Senden Sie mehrere HL7-Nachricht in der gleichen Socket-Verbindung
- 9. Senden String-Variable über TCP-Verbindung Lua
- 10. Zugriff auf eine TCP-Verbindung von der Funktion. C#
- 11. Senden von Dateien und Nachrichten über dieselbe TCP-Verbindung
- 12. Senden von Nachricht an ServiceActivator in Spring Integration nach dem Senden der Antwort im TCP-Gateway
- 13. Tomcat/BlazeDS/ActiveMQ Problem beim Trennen der Verbindung
- 14. Umleiten einer TCP-Verbindung
- 15. Python TCP doppelte Nachricht
- 16. Fehler beim Senden der Nachricht
- 17. TCP-Verbindung beendet
- 18. Zustand der TCP-Socket (Verbindung) nach der Seitenaktualisierung speichern
- 19. TCP/IP Kontinuierlich Nachricht empfangen, ohne die Verbindung zu schließen
- 20. Java - TCP-Verbindung
- 21. empfangen Nachricht von Port in TCP-Verbindung mit C#
- 22. Ich kann keine Nachricht an den TCP-Server senden
- 23. TCP Mehrere Nachrichten senden, ohne die Verbindung zu schließen
- 24. C# Tcp Client kann keine Nachricht an Android-Server senden
- 25. Anfügen und Trennen der Datenbank
- 26. Delphi: Begrenzen der TCP-Verbindungen
- 27. Lesen der TCP-Sequenznummer vor dem Senden eines Pakets
- 28. Datei herunterladen und Client-Verbindung trennen?
- 29. SwiftSocket: Kann nicht mehr als eine TCP-Nachricht senden
- 30. Autoit TCP-Verbindung zum Server
Kurz gesagt - nein, es ist nicht garantiert (mit Ausnahme bestimmter Bedingungen/Verwendung) – Vlad
Aus Neugier, warum TCP über UDP, wenn Sie eine Nachricht vom Typ Feuer & Vergessen haben wollen? – ColinM
@ColinM - Ich mache eine Chat-Anwendung und habe versucht, den besten Weg zu finden, jemanden zu "treten". Ich hatte gehofft, der Server könnte eine Nachricht senden, dass die Person von X wegen Grund Y getreten wurde, dann sofort die Verbindung schließen und sie trennen. –