Wargame: Fehler im Program?
-
hmm, nicht? habs jetzt mal mit strlen probiert und selbe confuse ergebnis:
received: Ù%
-
guys? irgendwelche ideen woran es liegen könnte?
-
nimm doch length():
send(server.getSock(),msg.str().c_str(),msg.str().length(),0);(btw, was hängt eigentlich am anderen Ende deines Sockets?)
-
lenth hilft auch nicht (is ja eigentlich auch das selbe wie strlen(), oder)
Am anderen ende hängt:
ServerDo server("vortex.labs.pulltheplug.org",5842,10);mehr weis ich auch nicht. Installier gerade mal Ethereal, vlt haperts ja nur bei der ausgabe. Sonst noch Ideen was das Problem sein könnte?
-
Ist dir bewußt das recv auch z.B. nur mit einem Byte zurückkehren kann?
-
Und was soll mir das sagen? dass ich mehrere recvs abfangen soll? Aber müsste das erste dann nicht trotzdem ein 'l'(ogin) oder was anderes lesbares sein? Ich aber krieg ja nur müll zurück:
YÒeyaf¥JN
-
ich getraue mich mal, ohne wirklich erfahrung mit den sockets zu haben, ins blaue raus zu raten und würde behaupten, dass bei:
recv(server.getSock(),buf2,sizeof(buf2),0);eher etwas in diese richtung sein müsste
recv(server.getSock(),&buf2,strlen(buf2),0);
-
1. Wieso sollte man einen String in der Länge des bisherigen Strings empfangen wollen?

2. Der Name eines Arrays kann als Zeiger auf sein erstes Element genutzt werdenDes Rätsels Lösung liegt wahrscheinlich einfach in der Korrekten Benutzung von send und recv (Hint: ......Rückgabewert.......)
EDIT:
Ach, noch ein Hint: ......Nullterminierung......
-
Hmm, sry ich brauche doch noch einmal eure Hilfe

Ich habe das Program jetzt so modifiziert, dass die Antwort folgendermaßen entgegengenommen und ausgegeben wird:
//and take the answer char buf2[100]; for(unsigned int i=0;i<sizeof(buf2);i++){buf2[i]=0;} cout<<"received "; cout<<recv(server.getSock(),buf2,sizeof(buf2),0); cout<<" bytes:"<<endl; for(unsigned int i=0;i<strlen(buf2);i++) { if( buf[i]==0) {cout<<endl;} else{ cout<<buf[i]<<" "; } } cout<<endl; return 1;Dadurch erhalte ich als Antwort:
received 12 bytes:
961150710 3086187308 3086187400 64971124 134514720 3086352340
3086354068 3215310212 3086294814 134513552 3215310144Meint ihr, die Antwort ist ein Code den es zu knacken gilt oder habe ich mich hier nur wieder verprogrammiert?
-
Ich denke mal, du hast da ein paar Variablen verwechselt - dein recv()-Aufruf füllt das Array 'buf2', aber anschließend gibst du den Inhalt von 'buf' aus.
(PS: Statt der ersten Schleife kannst du auch memset() verwenden - das ist womöglich effizienter)