Einzelnen Beitrag anzeigen

Nogge

Registriert seit: 15. Jul 2004
336 Beiträge
 
Delphi 7 Professional
 
#20

Re: Winsock , send/recv, wie?

  Alt 20. Apr 2007, 17:05
Vllt möchte xxl1 ja einfach auf dieser Ebene arbeiten, um diese besser kennenzulernen oder performance-orientiert zu programmieren.
Zum Problem:
Delphi-Quellcode:
net_s_server.data_recived:= recv( net_s_server.S_server_accepting ,
       net_s_server.buffer_rcv , transfer_length(net_s_server.buffer_rcv) , 0);
=> Hier bestimmst Du die Länge des allgemeinen Record-Typs, nicht aber die des gefüllten. Da die Länge des empfangenden Puffers beim Empfang unbekannt ist, kannst Du so nicht weiterarbeiten. Beim Empfang von nicht-primitiven Typen musste daher ein statisches array deklarieren, das die Länge der max. Eingabe hat.
Mein Vorschlag:
Du veränderst den string-Typ aus Deinem record in ein array[0..x] of char/byte. So kannste dann beim Empfang auch ganz einfach mit SizeOf() die statische Länge des Records angeben, da es jetzt ja keine dynamischen, d.h. nicht-primitiven Datentypen mehr gibt. Die Länge des tatsächlichen Strings bzw. array of char kannste ja einfach mit Length() bestimmen, da diese Funktion nach dem Null-Byte sucht, d.h. dem standardisiertem Ende eines Strings und daraus die Länge ermittelt. Wenn du andere nicht-primitive Datentypen versenden möchtest, würde ich an Deiner Stelle eine zweite Integer-Variable in deinem Record deklarieren, die die tatsächliche Länge des Datentyps beinhaltet.

Gruß Nogge
  Mit Zitat antworten Zitat