Was ist SOCK_STREAM SOCK_DGRAM und?
Ich kam gerade über diese seltsame Sache, die ich zu sehen bekam, Anwendung ist, dass standardmäßig, die Sie verwenden SOCK_STREAM
Funktion. Warum ist es so? Ist dies SOCK_STREAM
einfach erstellen mehrere streams? Oder ist es die standard - SOCK_STREAM
Funktion zur Erstellung von TCP-stream(s)?
Ich dachte, tsunami basiert auf UDP, aber immer noch einige Funktionen wie TCP, z.B. TCP-fairness, Freundlichkeit, etc.
Könnte jemand bitte etwas Licht auf dieses Problem? Ich bin Total verwirrt über diese.
Du musst angemeldet sein, um einen Kommentar abzugeben.
TCP fast immer verwendet
SOCK_STREAM
- und UDP verwendetSOCK_DGRAM
.TCP (
SOCK_STREAM
) ist ein Verbindungs-basiertes Protokoll. Ist die Verbindung hergestellt und die beiden Parteien haben ein Gespräch, bis die Verbindung beendet durch eine der Parteien oder durch einen Netzwerk-Fehler.UDP (
SOCK_DGRAM
) ist ein Datagramm-basierendes Protokoll. Senden Sie eine Datagramm-und bekommen eine Antwort und dann ist die Verbindung beendet.Wenn Sie senden mehrere Pakete, die TCP verspricht Ihnen in Ordnung ist.
UDP nicht, so dass der Empfänger benötigt, um Sie zu überprüfen sind, wenn der Auftrag
Angelegenheiten.
Wenn ein TCP-Paket verloren geht, kann der Absender sagen. Nicht so für UDP.
UDP-Datagramme sind in der Größe begrenzt, aus dem Gedächtnis ich denke, es ist 512
bytes. TCP senden kann, viel größeren Klumpen als das.
TCP ist ein bisschen robuster und macht mehr Kontrollen. UDP ist ein Schatten
geringeres Gewicht (weniger computer-und Netzwerk-Belastung).
Wählen Sie das Protokoll angemessen, wie Sie interagieren wollen mit dem anderen computer.
Update: meine Antwort scheint nicht mehr relevant, aber die ursprüngliche Frage bezeichnet, UDT, das ist ein verbindungsorientiertes Protokoll basiert auf UDP. Mehr info hier: http://en.wikipedia.org/wiki/UDP-based_Data_Transfer_Protocol
UDT erscheint zu bieten API, die imitiert die klassische BSD-sockets-API, so dass es verwendet werden kann als drop-in-Ersatz, sowohl für stream-und datagram-orientierte Anwendungen. Überprüfen Sie z.B.
sendmsg
undrecvmsg
- beide werfen eine Ausnahme, wenn ein socket erstellt mitSOCK_STREAM
, und alle die stream-orientierten APIs, die eine Ausnahme für den socket angelegt mitSOCK_DGRAM
als gut.Im Falle von
SOCK_DGRAM
es führen einige zusätzliche Verarbeitung, allerdings ist es nicht einfach wickeln Sie den UDP-socket transparent in einem solchen Fall - soweit ich das verstanden habe den code nach einem kurzen Rückblick (ich bin nicht vertraut mit UDT-internals-oder Protokoll-spec). Lesen Sie die technische Papiere könnte helfen, eine Menge.Die Bibliothek immer schafft seine zugrunde liegende, "echte" Buchse, wie ein Datagramm von einem (check channel.cpp,
CChannel::open
).