Bonjour
Mon projet de bataille navale est en client serveur. Donc je lance le serveur puis je lance le client.
Sur le client je rentre mon login et mon mot de passe puis je l'envoie au serveur.
Mon probleme c'est la communication entre le client et le serveur. Pour cela j'utilise la fonction recv et send. Quand on fait un envoi ca marche (l'envoi et la récption se passe bien) mais j'envoie le login et le mot de passe (donc je fais 2 envois). Et là ca coince car je n'arrive pas à récupérer le 2ème envoi.
Je vous joins mon code
Vraiment merci de votre aide car là je suis vraiment coincé
code du serveur
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90 #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h> #include <stdio.h> #define PORT 44951 #define ADDRESS "10.211.55.5" int sd, ns, fromlen; char essai[6]=""; char essai2[7]=""; char login[50]="admin"; char mdp[50]="azerty"; struct sockaddr_in my_addr, user_addr; int i=0; int rec=0; int rec2=0; int temp=0; int connex=0; int envoi=0; int main() { //SOCKET if((sd=socket(AF_INET,SOCK_STREAM,0)) == -1) {perror("\n erreur socket"); exit(-1);} //DEFINITION DE L'INTERFACE RESEAU my_addr.sin_family = AF_INET; my_addr.sin_port = htons(PORT); my_addr.sin_addr.s_addr = inet_addr(ADDRESS); bzero(&(my_addr.sin_zero),8); //BIND if((bind(sd,(struct sockaddr *)&my_addr, sizeof(struct sockaddr))) == -1) {perror("\n erreur bind"); exit(-1);} //LISTEN if((listen(sd,NBCLI)) == -1) {perror("\n erreur listen"); exit(-1);} printf("\n avant le accept\n"); //ACCEPT ns = accept(sd,(struct sockaddr *)&user_addr, &fromlen); printf("\n apres le accept\n"); while (envoi!=2) { printf("\n passage dans le while\n"); if(fork()==0) { //RECV rec=recv(ns,essai,8,0); if(rec!=-1) { send(ns ,"ok" ,strlen("ok")+1,0); envoi++; printf("\n %s\n",essai); printf("\nenvoi %d\n",envoi); } else { envoi=2; perror("errrreur recv"); } //rec2=recv(ns,essai2,7,0); } else{ envoi=2; } } }
Code du client
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> #include <errno.h> #include <stdio.h> #define PORT 44951 #define ADDRESS "10.211.55.5" int main() { int sd,fromlen,con,env,env2; char essai[6]; char essai2[6]; char login[12]; char mdp[12]; struct sockaddr_in dest_addr; sd=socket(AF_INET,SOCK_STREAM,0); if (sd==-1) perror("\nerreur socket \n"); else { dest_addr.sin_family=AF_INET; dest_addr.sin_port=htons(PORT); dest_addr.sin_addr.s_addr=inet_addr(ADDRESS); bzero(&(dest_addr.sin_zero),8); con=connect(sd,(struct sockaddr *) &dest_addr, sizeof(struct sockaddr)); if (con==-1) perror("\Erreur connect \n"); else { printf("Veuillez entrer votre login\n"); fgets(login,sizeof login,stdin); printf("Veuillez entrer votre mot de passe\n"); fgets(mdp,sizeof mdp,stdin); env=send(sd,login,strlen(login) + 1,0); if (recv(sd,essai,6,0)!=-1) { printf("\nessai=%s\n",essai); env2=send(sd,mdp,strlen(mdp) + 1,0); } //rec=recv(sd,essai2,6,0); if ((env==-1)||(env2==-1)) perror("\n erreur receive \n"); else { //printf("\n%s\n",essai2); printf("\n%d\n",strlen(login)); printf("\n%d\n",strlen(mdp)); } } } close(sd); }
Partager