C socket: recv und sende alle Daten

8

Ich möchte ein ähnliches Verhalten wie folgt erhalten:

  1. Serverlauf
  2. Client ausführen
  3. Client gibt einen Befehl wie "help" oder andere
  4. ein
  5. Der Server reagiert entsprechend
  6. gehe zu 3

Das Problem ist, dass wenn meine Funktion excCommand ("help") läuft nur ein wenig Text empfangen und gedruckt wird. Meine Textdatei ist dies:

%Vor%

nur COMMAND HELP wird gedruckt. Ein weiteres Problem ist, dass wenn ich einen Befehl eingabe nichts gedruckt wird und nach 2 Befehl Client beenden. Dies ist insbesondere das Stück:

%Vor%

Dies ist der Server:

%Vor%

Handler:

%Vor%

und das ist mein Klient:

%Vor%

Entschuldigen Sie, dass Sie so langatmig sind

    
Lorenzo Cinque 20.11.2012, 18:29
quelle

3 Antworten

12

Die Funktionen recv() und send() garantieren nicht, dass alle Daten gesendet / empfangen werden (siehe man recv , Mann senden )

Sie müssen Ihre eigene send_all() und recv_all() implementieren, etwas wie

%Vor%

Der folgende Leitfaden kann Ihnen helfen, Beej's Guide zur Netzwerkprogrammierung

    
Jah 20.11.2012, 18:34
quelle
1

Übliche Probleme.

%Vor%

Ungültig. numBytesRecv könnte Null sein, in diesem Fall gibt es überhaupt keine Nachricht, ansonsten muss es positiv sein, wie Sie bereits für negativ getestet haben, und es zeigt die tatsächliche Länge der Nachricht an, was nicht unbedingt ist nullterminiert Wechseln Sie zu:

%Vor%

und dann:

%Vor%

Sinnlos. Entfernen.

%Vor%

An diesem Punkt sollten Sie nach numBytesRecv < 0 suchen und perror() oder einen seiner Freunde aufrufen.

    
EJP 17.12.2015 22:11
quelle
0

Ich entscheide mich, vor jedem send () zu senden, wenn ich fortfahren muss oder nicht.

so habe ich zuerst 3 definieren

%Vor%

Dann um meine Daten zu senden

%Vor%

Und um es zu erhalten:

%Vor%     
ale-batt 14.12.2016 17:03
quelle

Tags und Links