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 ...
- Socket 478 ✓ - Forum Processeur
- Carte mere socket 775 - Forum Carte graphique
- Check_nrpe state critical: socket timeout after 10 seconds. ✓ - Forum Ubuntu
- Socket 1150 vs 1155 ✓ - Forum Matériel & Système
- Exception:une requête d’envoi ou de réception de données n’a pas été autorisée car le socket n’est pas connecté et (lors de l’envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n’a été fournie ✓ - Forum Programmation
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 :)