C Soumettre la commande au serveur à partir du client

J’ai une application client-serveur qui fonctionne sur UDP (j’en ai besoin UDP pas tcp). Un client peut envoyer un message au serveur et celui-ci fonctionne correctement et inversement. Je veux que le client puisse transmettre un message comme “_connect game1 10” et déclencher une fonction correspondante sur le serveur appelée _connect (nom de char *, int num). Comment cela peut-il être effectué pour parsingr chaque commande pour déclencher quelle commande? et la sérialisation est une solution et comment la mettre en œuvre.

Vous pouvez faire quelque chose selon les étapes suivantes: 1. Créer une structure de message

typedef struct info { char clientReq[MAX_LENGTH]; char sub[MAX_LENGTH]; u_int32_t value; u_int16_t end; //Set for the packet which closes the connection }messageInfo; 

Sur le client

  1. Créer un socket et lier localement // et se connecter au socket du serveur (éventuellement)

     fd = socket( family, SOCK_DGRAM, 0 ); //handle error struct sockaddr_in peerV4; struct sockaddr_in clientV4; rc = bind(fd,(struct sockaddr *) &clientV4, sizeof clientV4); //error handling 
  2. Envoyez les données de paquet au serveur.

      //update peer(server) socket info here peerV4.sin_family = AF_INET; peerV4.sin_port = htons(serverPort); peerV4.sin_addr.s_addr = "xxxx"; uint8_t *tBuf = (uint8_t *)malloc(sizeof (info)); //memset to zero info *pHeader = (info *)tBuf; pHeader->value = htonl(10); //local value to send pHeader->end = htons(0); pHeader->clientReq = "connect"; pheader->sub = "game1"; sendto(serverSock, tBuf, sizeof(info),0 ,(struct sockaddr *) &peerV4, sizeof(peerV4)); 
  3. Envoyer le dernier paquet et fermer le socket local.

      pHeader->end = htons(1); // so the server closes the socket //send packet close(fd); 

Sur le serveur 1. Créez un socket UDP, attachez-vous à une adresse locale, attendez que le client vous envoie les données et utilisez recvfrom

  fd = socket( family, SOCK_DGRAM, 0 ); //bind socket uint8_t *recvBuf = (uint8_t *)malloc(sizeof(info)); info *pheader = (info *)recvBuf; int currLen = recvfrom( fd, recvBuf, mBufLen),0,(struct sockaddr *)&peerV4, &sockaddrLen); //error handling if(currLen > 0) { if(htons(pheader->end) == 1) //close socket char *localSub = pheader->sub; char *localRecv = pheader->clientReq; //do something with the values on the server like if (strcasecmp(localRecv,"connect") == 0) //pseudo connect(sub,pheader->value) }