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


Anmelden zum Antworten