Probleme socket ...
Résolu
gacki
Messages postés
120
Statut
Membre
-
gacki Messages postés 120 Statut Membre -
gacki Messages postés 120 Statut Membre -
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.
A voir également:
- Probleme socket ...
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock' (2) - Forum Bases de données
- Error 2002 (hy000): can't connect to local server through socket '/run/mysqld/mysqld.sock' (2) - Forum Linux / Unix
- Socket error soulseek - Forum Logiciels
- Socket 478 ✓ - Forum Processeur
- Socket ft1 ✓ - Forum PC portable
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
120
Statut
Membre
merci beaucoup :)