Structs senden ?
-
Hi,
könnte mir einer von euch bitte einen Tip geben wie ich ein Struct am besten mit einem send() verschicken kann ? Bin noch ein ziemlicher Neuling...deswegen vielleicht ne dumme Frage für euch, sorry. Die Suchfunktion konnte mir auch nicht wirklich weiterhelfen.
Danke schon mal,
Daniel
-
insofern keine pointer in dem struct verwendet werden :
die adresse des structs: &my_struct
und die laenge: sizeof(my_struct)wenn du allerdings pointer im structs hast (char* usw.) dann musst du dir zuerst einen buffer zusammenbaseln, wo du alles reinschreibst.
danach gibst du die adresse des bufffers und die groesse an.Meep Meep
-
schönen Dank schon mal für die Hilfe...allerdings hilft mir das auch nicht so recht weiter. Wenn ich versuche es so zu machen bekomme ich die Fehlermeldung:
error C2664: 'send': Konvertierung des Parameters 2 von 'ICON *__w64 ' in 'const char *' nicht möglich
Meine Structs schauen wie folgt aus:
struct ICON Player1 = {'X' , 0 , 0 , 0 , 1}; struct ICON Player2 = {'Y' , BB-1 , BH-1 , 0 , 2}; struct ICON Cat = {'O' , BB/2 , BH/2 , 0 , 0};
und die möchte ich am besten mit meiner SendToAll Funktion an meine Clients verschicken...
int sendToAllClients(char* msg) { int rc,i; for(i=0;i<MAX_CLIENTS;i++) { if(clients[i].inGame==true) { if(!clients[i].used) { continue; } rc=send(clients[i].socket,msg,strlen(msg),0); if(rc==SOCKET_ERROR) { printf("Error: Sending to Client %d failed: %d\n",i,WSAGetLastError()); } } else { char buf3[256]; sprintf(buf3,"Bitte warten bis ein Platz frei wird...."); send(clients[i].socket,buf3,strlen(buf3),0); } } return 0; }//int
Wie krieg ich das denn am besten hin ? Und vor allem wie krieg ich die 3 structs in einen buffer und wie kann ich die structs bei den clients wieder herauspopeln ?
Vielen Dank schon mal.
Daniel
-
struct my_Struct t_struct; ... char *temp; unsigned int size = sizeof(t_struct); temp = (char*) t_struct; sock = send(client_socket,temp,size,flag); ... // diesmal 3 structs struct my_Struct t_struct1,t_struct2,t_struct3; char *temp3 = 0; unsigned int t_size3 = 3 * sizeof(t_struct); temp3 = new char[t_size3]; memcpy(temp3,&t_struct1,sizeof(t_struct1)); memcpy(temp3 + sizeof(t_struct1),&t_struct2,sizeof(t_struct1)); memcpy(temp3 + (sizeof(t_struct1) * 2), &t_struct3,sizeof(t_struct1)); sock = send(client_socket,temp3,t_size3,flag);
so sollte das ungefaehr funktionieren
Meep Meep