Datenübertragung bei der Netzwerkprogrammierung ?!

xFile

Mitglied
Hallo,
ich habe zwar schon Client / Server programmiert, jedoch erfolgte die Datenübertragung per send() und recv().
Ich frage mich nun, gibt es auch eine andere Möglichkeit die Daten zu übertragen und nicht als String (Array), in C++ ?
Bin auf Aussagen gestoßen, in den die Binäre-Datenübertragung erwähnt wurde, nur welche Funktionen sind dafür zuständig ?
Ich mache mir zur Zeit nämlich gedanken darüber, wenn mir ein Server den Inhalt eines Verzeichnises zum Client senden soll, dann müssen doch unterschiedliche Informationen gesendet werden, wie z.B.:
- Typ (Ordner oder Datei)
- Name des Ordners / der Datei
- Erstellungsdatum
usw.

Würde man diese ganzen Informationen nun als Strings (Arrays) senden oder wie geht man da vor.
Stelle mir das bei Strings etwas umständlich vor wenn ich eine Datei übertragen möchte, denn dann müsste ich die Datei ja entweder Zeichen für Zeichen übertragen oder immer ein Teil rausschneiden und dann senden und wieder zusammenfügen.

Hoffe mir kann da jemand ein kleinen Anstoß geben, damit ich mir bei meinem nächsten Projekt nicht zu viele Umstände mache.
z.B.: Wo kann man sowas nachlesen, finde nur recht wenig im Internet zu professioneler Netzwerkprogrammierung.
 
wer sagt denn, das man strings überträgt?
mit send() überträgst du soviele bytes, wie du als länge angibst
ich hab keine ahnung ob es ohne weiteres mit windows möglich ist BITS zu übertragen... interessiert mich ehrlich gesagt auch nicht...
wenn du solche sachen wie "Typ (Ordner oder Datei)" übertragen möchtest.. kannst du das in einem byte zusammenfassen... sowas nennt man dann FLAG... und mit einem byte lassen sich bis zu 8 flags setzen.. is ja logisch 1 byte = 8 bit
für dateiattributinformationen langen dann wohl 8 bit.... für das datum würde ich einen regulären timestamp benutzten (32 bit) und den namen als string.. zusammen gefasst als struct ergäbe es inetwa das hier:
Code:
struct packet_s
{
	char cFlag;
	DWORD dwTimeStamp;
	char szName[255];
};
das wiederum heisst nicht das du die vollen 261 bytes übertragen musst, allerdings ist dann die reihenfolge wichtig...
Code:
packet_s packet;

packet.cFlag = 0; // keine eigenschaften & ist datei
packet.dwTimeStamp = 123;
strcpy(szName, "boot.ini");

send(socket, (char*)&packet, strlen(szName) + sizeof(DWORD) + sizeof(char), 0);
das ganze ist natürlich völlig willkürlich...
 
Zurück