Datenstrom kann nicht eingelesen werden (Netzwerk)
-
Hi.
Folgendes Problem:
Ich habe ein Programm geschrieben, dass 2 Befehle an ein Endgerät sendet. Dieses schickt mir daraufhin Informationen, die ich über die Befehle angefordert habe.
Leider klappt das nur bei einem der Befehle.
Bei dem anderen empfange ich anschliessend von den Daten nur ein Zeichen, und zwar das erste (# (hex 23)). Der Rest des Datenstreams kommt, warum auch immer , einfach nicht an (Zumindest nicht, in meinem Programm).Codeschnipsel:
char ausgabe[1000]; s = socket(AF_INET,SOCK_STREAM,0); ... setsockopt(s,SOL_SOCKET,SO_RCVTIMEO,(char*)&RecvTimeout, sizeof(RecvTimeout)); ... while(..) x=recv((SOCKET)s, ausgabe, 1000,0); for() printf("%c",ausgabe[]) ...Ich habe die Pakete, die bei mir ankommen, mal genauer Untersucht.
Dort steht auch bei dem Fehlerfall die Information, die ich in meinm Programm sehen will...
Die Informationen kommen also zumindest an meiner Rechner an :).Kann es sein, dass bestimmte Stuerzeichen in dem Datenstrom, der über recv eingelesen wird, mein Programm oder die Funktion recv so beeinflussen, dass ausser einem '#'(hex 23) nichts mehr ankommt ?
ps; Beginn des Fehlerdatenstroms;
23 00 00 00 67 0d 0a uswBin für jede Idee , Information, Frage.. etc danbkbar

-
Was gibt dir revc denn zurück? Und wie sieht der Dump deines Datenstroms aus (Hexadezimal)?
grüße
-
"Die Funktion recv() liefert als Rückgabewert die Größe des empfangenen Speicherbereichs oder -1 im Fehlerfall. Da der Rückgabewert nichts über die Grösse des tatsächlich gesendeten Pakets aussagt, muss dies vom Programm geregelt werden. Wenn die Pakete nicht immer gleicher Größe sind oder Endezeichen verwendet werden, wird man meist die Paketlänge in den ersten Bytes des ersten Paketes kodieren. Damit weiß der Empfänger, auf wieviel Byte er noch warten muss."
"Endezeichen" , daran könnte es eventuell liegen... nur was sind für recv Endezeichen ?
gleich ma suchen...Edit;
Soooo.. hab mir das ein oder andere mal ausgeben lassen und den Fehler gefunden!for(int i=0;i<=strlen(ausgabe);i++) { if(((int)ausgabe[i]>=33 && (int)ausgabe[i]<=126) ||(int)ausgabe[i]==10) printf("%c",ausgabe[i]); }Wie so oft liegts an dem einfachsten Punkt.. ;).
Hier liegts an der Abbruchbestimmung strlen(ausagbe).
Denn genau in dem beschriebenem Fehlerfall sieht strlen am Anfang des "Strings" ein Endzeichen. Nur deshalb wird nicht mehr von dem String ausgegeben
...Naja.. also wars doch kein größeres Problem.
Danke für die Hilfe.
