wie sende ich Daten über Sockets
-
Hallo Leute,
ich verzweifel hier noch, undzwar folgendes ich will über sockets Daten senden. Nur mein problem ist, dass ich nicht weiss, wie ich mein protokoll in einen char umwandeln kann und dann nachdem empfangen wieder umwandeln kann. Zum besseren verständnis etwas Code:
// Der Packet Header struct sBasePacket { int uiSize; // Die Größe des Packets int iTyp; // Packettyp int iNumPac; // Packetnr. int iPlayer; // Spieler char Data; // Daten }; .... //Initialisierung der sockets etc. blabla sBasePacket test;//Var die wir schicken wollen test.iTyp = POSINFO;//sertzen der werte test.iNumPac = 0; test.iPlayer = 1; test.uiSize = sizeof(test); //verschicken der Daten Send((char*) &test,1); send(SocketData, (char*) &test, sizeof(sBasePacket),0); //beim empfangen der Daten habe ich es so versucht aber ich bekomme nur falsche werte raus int error = recvfrom(SocketData, DatenBuffer, sizeof(DatenBuffer),0,(SOCKADDR *)&it->sPlayerAddr, &addr_size); sBasePacket *test = (sBasePacket*)&DatenBuffer;//so versuch ich den char in seine alteform zu quetschen
noch ein paar infos es ist ne udp verbindung und eine client server "architktur"
ich hoffe ich konnte mein problem gut beschreiben und warte auf antwort
-
hi!
schau mal da nach:http://www.c-worker.ch/
http://www.linuxgazette.com/issue74/tougher.html
http://www.online-tutorials.net/netzwerk/tutorials-10.html
http://www.ecst.csuchico.edu/~beej/guide/net/html/
http://www.gamedev.net/reference/list.asp?categoryid=30
http://www.gamedev.net/reference/articles/article1587.asp
http://www.gamedev.net/reference/articles/article1059.asp
http://www.kickme.to/netkomp/
http://madwizard.org/view.php?page=tutorials.networking.contents&lang=cppfind ich ganz gut zum lesen....also schaus dir mal an...
cu
-
die meisten hab ich davon selber gefunden aber bei dem problem hören die auf. Denn denen reicht es aus strings zu übertragen.
-
ueber die sockets kannst du ja nur bytes uebertragen. du musst komplexere
typen "von hand" in eine bytefolge serialisieren; da wirst du nicht drum
rum kommen.
-
quatsch. man kann die bytes einfach in einen zeiger auf eine struktur casten
-
meinst du so? Das funktioniert aber nicht.
test.iTyp = POSINFO; test.iNumPac = 0; test.iPlayer = 16; test.uiSize = sizeof(test); char Data = (char) test; sBasePacket temp = (sBasePacket)Data;
-
schau dir mal als idee die streams von hume im c++ faq an, da gibt es ein beispiel mit strukturen
read und write
-
sBasePacket packet;
recvfrom(socket, reinterpret_cast<char*>(&packet), sizeof(sBasePacket), ...);Musst du wahrscheinlich noch eine Schleife drumrumbauen. ist ja nicht sicher das du das komplette Paket mit einem recvfrom erhälst...
-
//so quetsche ich mein Packet in nen String sBasePacket test; char *Data = (char*) &test; ...send..blabla char buf[4096]; ..recvform..blabla //nur nachdem ich die Daten empfangen habe krieg ich sie nicht wieder zurück ins alte format sBasePacket *test = reinterpret_cast<sBasePacket*>(buf); //da gibt er mir nur bockmist aus printf("Size: %d\n",test->uiSize);
-
ha, habs hingekriegt mit nem reinterpret_cast hatte nur woanders ein paar Fehler gehabt;-)
Juchu es kann weitergehen
-
Ich hätte dir empfohlem Java zu benutzen,
da ist das Ganze nämlich kein Problem!Gruß;
Markus