Probleme socket ...
Résolu
gacki
Messages postés
109
Date d'inscription
Statut
Membre
Dernière intervention
-
gacki Messages postés 109 Date d'inscription Statut Membre Dernière intervention -
gacki Messages postés 109 Date d'inscription Statut Membre Dernière intervention -
bonsoir,
S'il vous plait j'ai besoin d'aide dans un code que je suis entrain d'ecrire en C. en fait j'essaye d'apprendre les sockets en C mais ils ne marchent pas en fin le coté client qui ne marche pas surtout dans la fonction write une fois le programme arrive à cette fonction il se termine authomatiquement, pourquoi ? j'en sais rien j'ai beaucoup chercher sur google mais toujours je ne comprend pas le probleme.
bon voila le code que j'est ecris :
coté serveur :
coté CLIENT (la ou il y a probleme) :===================
est ce que quelqu'un pourrait me dire ou se trouve l'erreur ? et merci d'avance.
S'il vous plait j'ai besoin d'aide dans un code que je suis entrain d'ecrire en C. en fait j'essaye d'apprendre les sockets en C mais ils ne marchent pas en fin le coté client qui ne marche pas surtout dans la fonction write une fois le programme arrive à cette fonction il se termine authomatiquement, pourquoi ? j'en sais rien j'ai beaucoup chercher sur google mais toujours je ne comprend pas le probleme.
bon voila le code que j'est ecris :
coté serveur :
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> struct sockaddr_in name; struct sockaddr client; main() { printf("création de la socket : "); int maSocket = socket (AF_INET, SOCK_STREAM, 0); if(maSocket != -1) { name.sin_port = htons (2222) ; name.sin_addr.s_addr = INADDR_ANY ; int validation = bind(maSocket, (struct sockaddr *)&name, sizeof(name)); printf("validation : %d\n\n",validation); if(validation == 0) { if(listen(maSocket,5) != -1) { int lent = sizeof(client); int li = accept(maSocket, &client, &lent); if(li != -1) { printf("il y a %d qui est connecter\n",li); char chaineLu[100]; read(li, chaineLu, sizeof(chaineLu)); printf("message du client : %s\n",chaineLu); printf("socket fermer"); } else { printf("erreur durant l'accepte de la cnx !\n"); } } else { printf("erreur au niveau du listening"); } } else { perror("probleme au niveau de la fonction bind "); } } else { printf("probleme au niveau de la socket !"); } }
coté CLIENT (la ou il y a probleme) :===================
#include <stdio.h> #include <stdlib.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <string.h> #include <unistd.h> #include <fcntl.h> struct sockaddr_in name; main() { printf("création de la socket : \n"); int maSocket = socket (AF_INET, SOCK_STREAM, IPPROTO_TCP); name.sin_addr.s_addr = inet_addr ("127.0.0.1") ; name.sin_port = htons (2222) ; printf("I am in %d\n",maSocket); if(maSocket > -1) { printf("I am in"); if(connect(maSocket, (struct sockaddr *)&name, sizeof(name)) != -1) { printf("I am in 2"); char *chaineEcrit = (char *)malloc(sizeof(char)*100); strcpy(chaineEcrit,"je suis client 1"); int s = write(maSocket, chaineEcrit, sizeof(chaineEcrit)); perror(" "); close(maSocket); printf("socket fermer cote client\n"); } else { printf("erreur durant l'accepte de la cnx !\n"); } } else { printf("probleme au niveau de la socket !\n"); } }
est ce que quelqu'un pourrait me dire ou se trouve l'erreur ? et merci d'avance.
1 réponse
Salut,
Ton souci est lié à la confusion entre sizeof et strlen.
Je t'invite à faire qq recherches à ce sujet ;)
Pour ton client, cela devrait mieux fonctionner avec :
Pour ton serveur :
La fonction read retourne le nombre d'octet lu. Il convient ensuite de bien définir la fin du buffer avec '\0' :
Enfin, beaucoup utilise les fonctions send/recv en lieu et place de write/read.
A creuser également.
++
Ton souci est lié à la confusion entre sizeof et strlen.
Je t'invite à faire qq recherches à ce sujet ;)
Pour ton client, cela devrait mieux fonctionner avec :
int s = write(maSocket, chaineEcrit, strlen(chaineEcrit));
Pour ton serveur :
La fonction read retourne le nombre d'octet lu. Il convient ensuite de bien définir la fin du buffer avec '\0' :
char chaineLu[100]; lu=read(li, chaineLu, 100); chaineLu[lu]='\0'; printf("message du client : %s\n",chaineLu);
Enfin, beaucoup utilise les fonctions send/recv en lieu et place de write/read.
A creuser également.
++
gacki
Messages postés
109
Date d'inscription
Statut
Membre
Dernière intervention
merci beaucoup :)