Bytes senden per Socket

Dieses Thema im Forum "C/C++" wurde erstellt von ExRevel, 19.02.2004.

  1. #1 ExRevel, 19.02.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
    hi...

    So, bevor ich nun endgültig verzweifel melde ich mich lieber hier. :)
    Also, ich schreibe gerade den Codewars Server in C++, da Perl mir zu langsam wurde, dabei möchte ich auch das Netzwerkprotokoll von Stringorientiert auf Byteorientiert umstellen, was bedeutet ich möchte (als beispiel) dem Clienten der sich gerade connected hat einen buffer senden, der folgendes enthält:

    0x02 0xff \r\n

    So schaut mein source aus:
    Code:
    int cnetwork::successcodes_welcome(int id){
    
    	char command_byte = 0x02;
    	char free_byte = 0xff;
    	char *buffer;
    	
    	buffer = new char[strlen(&command_byte)+strlen(&free_byte)+1];
    	
    	strcpy(buffer, &command_byte);
    	strcpy(buffer, &free_byte);	
    	strcat(buffer, "\r\n");
    
    	int retval;
    	
    	retval = send(client[id], buffer, strlen(buffer), 0);
    
    	return retval;
    }
    
    Senden tut er das auch ganz brav, nur das was beim client ankommt kann ich werder mit dem Perlclienten (mittels chr(0x02)) oder dem C++ Clienten in einem char-array-element wiederfinden.

    Wenn jemand erfahrungen mit sowas hat, wär ich super froh wenn er mir hilft, da ich erst seit 2 wochen c++ schreibe und mein kenntnisse somit noch etwas begrenzter sind! ;)

    ciao Exi
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 ExRevel, 19.02.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
    So, nun habe ich es selbst herrausgefunden! :) Alle die es sich angeschaut haben ein Danke!!

    ciao Exi
     
  4. thorus

    thorus GNU-Freiheitskämpfer

    Dabei seit:
    03.11.2002
    Beiträge:
    757
    Zustimmungen:
    0
    Ort:
    Passau, Niederbayern
    Öhm, ich hab zwei Fehler gefunden, ich weiß jetzt nicht ob du jetzt beide gefixt hast, ich will ja nicht, dass da noch Fehler drin sind. ;)

    Code:
    buffer = new char[strlen(&command_byte)+strlen(&free_byte)+1];
    "\r\n" sind 3 Bytes. '\r' '\n' '\0'
    Du hast jetzt 1+1+1 = 3 Bytes allokiert, aber gebraucht werden 1+1+3 = 5 Bytes.

    Warum brauchst du eigentlich auch '\r'? Das ist doch sonst nur unter Windows üblich und eigentlich ist das ja dein Protokoll, kann dir normal egal sein. ;)

    Aber hier liegt vermutlich nicht der Fehler.

    Code:
    strcpy(buffer, &command_byte);
    strcpy(buffer, &free_byte);	
    strcat(buffer, "\r\n");
    Beim 2. strcpy() überschreibst du aus Versehen den beim 1. strcpy() geschriebenen Wert.
    Das wird der Fehler gewesen sein.
     
  5. #4 ExRevel, 19.02.2004
    Zuletzt bearbeitet: 19.02.2004
    ExRevel

    ExRevel Routinier

    Dabei seit:
    16.02.2003
    Beiträge:
    430
    Zustimmungen:
    0
    Ort:
    Stuttgart
    Jo, ich war vorhin schon so festgefahren das ich nix mehr gesehen habe! jetzt sieht das ganze wie folgt aus und funktioniert auch! (strcpy wollte leider nicht wirklich, da kamm immer ein byte reingehüpft, wie habe ich nicht ergründen können):
    Code:
    int cnetwork::successcodes_welcome(int id){
    
    	char command_byte = 0x02;
    	char free_byte = 0xff;
    	char *buffer;
    		
    	buffer = new char[5];
    
    	buffer[0]= command_byte;
    	buffer[1]= free_byte;
    	buffer[2]= '\r';
    	buffer[3]= '\n';
    	buffer[4] = '\0';
    
    	int retval;
    	
    	retval = send(client[id], buffer, strlen(buffer), 0);
    
    	delete buffer;
    
    	return retval;
    }
    
    Hier als gegenbeispiel ;) wie man es macht und oben wie man es besser nicht macht! Danke noch mal thorus!

    ciao Exi

    PS: Das \r ist immer mit drin, da das ganze mal recht betriebssystemunabhängig werden soll und einige leute sich drauf verlassen das es kommt, da es in den standardprotokoll regeln des Projekts so eingetragen ist!
     
  6. Yuuhi

    Yuuhi Jungspund

    Dabei seit:
    21.01.2004
    Beiträge:
    22
    Zustimmungen:
    0
    Bei Netzwerkprotokollen ist \r\n als EOL eigentlich der Normalfall. Das ist z.B. bei smtp, http und nntp so. Das hat nichts mit Windows zu tun.

    Mata ne,

    Yuuhi
     
  7. thorus

    thorus GNU-Freiheitskämpfer

    Dabei seit:
    03.11.2002
    Beiträge:
    757
    Zustimmungen:
    0
    Ort:
    Passau, Niederbayern
    Hmm, wusste ich nicht. Naja, ich finds eigentlich überflüssig, aber naja, Standard ist Standard. ;)
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Bytes senden per Socket

Die Seite wird geladen...

Bytes senden per Socket - Ähnliche Themen

  1. PRO/Wireless 2200BG Network Connection, keine Verbindung ( RX bytes:0 (0.0 b) )

    PRO/Wireless 2200BG Network Connection, keine Verbindung ( RX bytes:0 (0.0 b) ): Hallo zusammen, ich hab Probleme mit dem WLAN, Suse 10.2 auf nem Medion Laptop... hab schon in andere Foren gepostet und Google..... und bin am...
  2. Optimale Definition von Potenzen im bc (Umrechnung Bytes)

    Optimale Definition von Potenzen im bc (Umrechnung Bytes): Das folgende Script zieht per SNMP accounting Daten vom Router und stellt diese leicht aufbereitet dar. Nun ist der GNU bc mehr als nur ein...
  3. problem mit lvm-partition > 2 terrabytes

    problem mit lvm-partition > 2 terrabytes: hellöu ich habe eine lvm2-partition von knapp 2 terrabytes. als ich diese vergrössert hatte (um 500 gb), war sie 2.15 terra gross. dies machte...
  4. Informationen in .semaphore packen & senden

    Informationen in .semaphore packen & senden: Hallo zusammen nach der für mich erfolglosen Suche im Internet nach passenden Informationen wende ich mich an Euch mit der Bitte mir in...
  5. Datei auslesen und fund per MAil versenden.

    Datei auslesen und fund per MAil versenden.: Hallo folgendes Script habe ich zur Zeit in Arbeit. Und zwar führe ich über "at" ein kleines Script aus was in einem Logfile nach bestimmten...