2017-11-27 1 views
0

umgehen Ich verwende ausgewählte Ansatz aus Sockets zu lesen, die meisten Leute empfahlen dies als den besten Weg. Das Problem tritt auf, wenn die gesendete Nachricht geteilt wird und ich nur die Hälfte davon erhalte. Ich muss ganze Server-Anwendung zu Schleife und versuchen, recv() den Rest der Nachricht zu blockieren. Ich habe darüber nachgedacht, einen neuen Thread für den sendenden Socket zu erstellen. Aber das fühlt sich an, als würde man die Idee des Auserwählten töten. So etwas wie mehr Clients konnten nicht vollständige Nachrichten senden.Wie mit Block Recv() mit Select

Was soll ich tun?

+0

Puffer die Antworten. Und fang nicht an zu analysieren, bis du genug gesehen hast. – wildplasser

+0

Wie sollte ich sie jedoch puffern? Habe eine Struktur mit der Verbindung verbunden, wo würde ich die gesendete Nachricht zwischengespeichert halten? –

+1

Ja.Ja. Ja. Ja. – wildplasser

Antwort

0

Sie müssen nichts blockieren. Speichere einfach das, was du bisher irgendwo mit dem Kanal gelesen hast, gehe zurück zu select() und mach weiter so lange, bis du das angesammelt hast, was du willst.

+0

Sie meinen also etwas wie einen Puffer mit dem Sockel haben? Ist es nicht schwieriger, den Überblick zu behalten, wenn viele Clients unvollständige Nachrichten senden? –

+0

Nein, warum? Sie benötigen lediglich eine Zuordnung von Sockets zu Puffern. Oft haben Sie eine Art Kontext- oder Sitzungsobjekt, das dem Socket zugeordnet ist und Puffer, Anmeldeinformationen, Timeouts usw. enthält. – EJP