Forum: Netzwerke
Delphi
by Zacherl,
22. Dez 2016
Der von dir verlinkte Code hat mehrere Schwächen:
Theoretisch ist es möglich, dass die Länge schon nicht in einem Stück ankommt
Wenn du zwei Streams hintereinander schickst, kann das letzte Paket von Stream 1 bereits die Länge und Daten von Stream 2 enthalten
Einfachste Vorgehensweise:
Erstmal ALLE eingehenden Daten an einen Buffer (präziser: einer FIFO Datenstruktur) hinten anhängen...
Forum: Netzwerke
Delphi
by Zacherl,
29. Nov 2016
Bei den non-blocking Sockets musst du beim Senden aufpassen:
Also müsstest du gegebenenfalls nach einem nicht vollständigen send()-Versuch manuell den Rest in einem/mehreren subsequenten send() Calls hinterherschicken.
Was zusätzlich immer passieren kann (blocking und non-blocking), dass die Daten eines einzigen send()-Aufrufs in mehreren recv()-Aufrufen ankommen. Irgendeine Form von...
Forum: Netzwerke
Delphi
by Zacherl,
11. Okt 2016
Von der Performance her sind die non-blocking Sockets sogar geringfügig langsamer, weil dort alle Events über Window-Messages getriggert werden, die zuerst den kompletten Weg durch die MessageQueue nehmen müssen. Das Pullen von blocking Sockets ist sehr sparsam was CPU Last angeht. Windows regelt die kompletten Synchronisationsmechanismen im Kernel, weshalb zwar einmalig ein Context-Switch...