Bonjour,
Dans le cadre d'une formation, je dois réaliser un petit serveur d'application qui va me permettre de faire 2 choses : déterminer si le nombre envoyé par le client est un nombre premier, ou bien de calculer l'aire et la circonférence d'un cercle avec le rayon envoyé par le client.

Côté "algorithmique", j'ai déjà les calculs de faits :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
pour le calcul de nombre premier ou non
int main (void)
{
  int i, nb, test;
  test  = 0;
  printf ("Entrez un nombre entier : ");
  if (scanf ("%d", &nb) != 1)
    return -1;
 
  for (i = 2; i < nb; i++, compter++)
    if (nb % i == 0)
      test = 1;
  if (!test)
    printf ("%d nombre premier \n", nb);
  else
    printf ("%d n'est pas nombre premier\n", nb);
  return 0;
}
J'ai pu créer un serveur et un client qui se voient et discutent (testé en envoyant une chaîne de caractères depuis le client qu'on récupère côté serveur avant de la renvoyer sur le client). Maintenant, j'aimerais pouvoir envoyer une opérande (p pour premier et c pour cercle).
Pour cela, je pensais passer par une structure :

fichier request.h
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
#ifndef REQUEST_H_
#define REQUEST_H_
 
 
//structure requete
 
struct Request {
	int operande1;
	char operateur;
  };
	typedef struct Request Request;
 
 
// structure reponse
struct Response {
	float result;
 	};
typedef struct Response Response;
 
#endif /* REQUEST_H_ */
Mon client (la partie application en elle-même, la connexion fonctionne) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
 
 
int main (int argc, char * argv[]) {
 
	struct sockaddr_in adresse;
	int    sock;
 
	int    nb_lus;
 
	Request operationDemande;
	Response resultat;
 
	//... ok jusque là, partie connexion serveur ok
	while (1) {
		printf("Opération à effectuer : ");
 
		if (write(sock, & (operationDemande.operande1), sizeof(Request)) < 0) {
			perror("write");
			break;
		}
		if (nb_lus = read(sock, & (operationDemande.operande1), sizeof(Request))== 0) 
			break;
 
		if (nb_lus < 0) {
			perror("read");
			break;
		}
		printf("Résultat : ");
 
	}
	return EXIT_SUCCESS;
	}
Et côté serveur - partie appli
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
void traitement_connexion (int sock) {
 
	int longueur;
	Request operationDemande;
	Response resultat;
 
	while (1) {
		longueur = read(sock, &(operationDemande.operande1),sizeof(Request));
 
		if (longueur < 0) {
			perror("read");
			exit(EXIT_SUCCESS);		
			}
 
		if (longueur == 0)
		  break;
 
		 printf("recu : %d\n", operationDemande.operande1);
		 fflush(stdout);
 
		 write(sock,&(operationDemande.operande1),sizeof(Request));
 
 
		}
		close(sock);
	}
Je ne vois pas trop comment y parvenir. L'idée serait de faire sur le shell du client, une fois la connexion établie quelque chose du style :
$ p 5
et en retour :
$ 5 est un nombre premier

Toute aide serait utile,
Merci d'avance