[Debutant] Probleme connection socket
Bonjour,
Je débute la programmation socket sous linux, je réalise donc une mini appli client-serveur.
Le client envoie un message au serveur qui l'affiche..enfin en principe, car j'ai un probleme au niveau de la connection :?
Voici le code du client, je l'ai commenté car je ne comprend pas encore tout, donc si je fais des erreurs de comprehension, n'hesitez pas à me corriger.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
int main()
{
struct sockaddr_in addr_serv; //structure contenant les infos du serveur
char* msg = "Hello World !"; //message à envoyer
int maSocket; // socket utilisée
addr_serv.sin_family = AF_INET; //type de protocole : internet
addr_serv.sin_addr.s_addr = htonl(INADDR_ANY); // adresse ip locale
addr_serv.sin_port = htons(80); // port 80
maSocket = socket(AF_INET,SOCK_STREAM,0); //creation de la socket
/* on se connecte grave à la socket au serveur decrit par addr_serv*/
if( (connect(maSocket,(struct sockaddr *)&addr_serv,sizeof(addr_serv))) == -1 )
{
printf("Connexion erreur !\n");
}
send(maSocket,msg,sizeof(msg),0); // on envoie le message
close(maSocket); //on ferme la socket
return 0;
} |
Voici maintenant le serveur, idem pour les commentaires, je suis là pour apprendre.
Code:
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
|
int main()
{
int maSocket; // socket utilisée
struct sockaddr_in localaddr; // structure qui decrit le serveur
struct sockaddr_in addr_entrant; // structure qui decrit le client qui se connecte
uint entrantlen; //taille de la structure addr_entrant
char *msg; //buffer pour le message
/*Création socket*/
if ( (maSocket = socket(AF_INET,SOCK_STREAM,0)) == - 1 )
{
printf("Erreur création socket !\n");
return 1;
}
/*On remplit la structure decrivant le serveur*/
localaddr.sin_family = AF_INET; // protocole internet
localaddr.sin_port = htons(80); // port 80 ouvert
localaddr.sin_addr.s_addr = htonl(INADDR_ANY); // adresses ip locales
bind(maSocket,(struct sockaddr*)&localaddr,sizeof(localaddr)); //on ouvre le tout
/*Attente d'une connexion*/
if ( listen(maSocket,1) != 0 )
{
printf("Erreur lors du listen() !\n");
return 3;
}
/*Si connexion on l'accepte et on remplit la struc du client qui se connecte*/
accept(maSocket,(struct sockaddr*)&addr_entrant,&entrantlen);
/* On reçoit le mesage dans le tampon*/
recv(maSocket,msg,sizeof(msg),0);
/*On ferme la socket*/
close(maSocket);
printf("%s\n",msg);
return 0;
} |
Voila donc vous l'avez deviné quand je lance le prog client (apres avoir lancé le serveur en arriere plan biensur), il me dit "connexion erreur !" :(
Je ne trouve pas l'erreur, j'ai pas du tout piger, merci pour votre aide.
Sorry
Re: [Debutant] Probleme connection socket
Citation:
Envoyé par sorry60
Je débute la programmation socket sous linux, je réalise donc une mini appli client-serveur.
Client TCP/IP:
- l'adresse IP ne peux pas être INADDR_ANY. Il faut une adresse réelle (ou locale comme 127.0.0.1)
- msg : Ne pas confondre pointeur et tableau. sizeof n'a pas du tout le même effet. Pour msg, utiliser strlen().
- quand le dialogue est terminé, on fait un shutdown(). C'est plus sympa pour le serveur...
Serveur TCP/IP:
- msg est un pointeur non initialisé. Il faut plutôt mettre une tableau de char. Le sizeof aura alors un sens...
Détails ici
http://emmanuel-delahaye.developpez.com/reseau.htm
Re: [Debutant] Probleme connection socket
Citation:
Envoyé par Emmanuel Delahaye
Citation:
Envoyé par sorry60
Je débute la programmation socket sous linux, je réalise donc une mini appli client-serveur.
Serveur TCP/IP:
- l'adresse IP ne peux pas être INADDR_ANY. Il faut une adresse réelle (ou locale comme 127.0.0.1)
- msg : Ne pas confondre pointeur et tableau. sizeof n'a pas du tout le même effet. Pour msg, utiliser strlen().
- quand le dialogue est terminé, on fait un shutdown(). C'est plus sympa pour le serveur...
Serveur TCP/IP:
- msg est un pointeur non initialisé. Il faut plutôt mettre une tableau de char. Le sizeof aura alors un sens...
Détails ici
http://emmanuel-delahaye.developpez.com/reseau.htm
Je pense qu'ici Emmanuel voulait plutot dire
Client TCP/IP:
- l'adresse IP ne peux pas être INADDR_ANY. Il faut une adresse réelle (ou locale comme 127.0.0.1)
- msg : Ne pas confondre pointeur et tableau. sizeof n'a pas du tout le même effet. Pour msg, utiliser strlen().
- quand le dialogue est terminé, on fait un shutdown(). C'est plus sympa pour le serveur...
En effet le serveur en TCP/IP peut avoir INADDR_ANY
Code:
1 2
|
localaddr.sin_addr.s_addr = INADDR_ANY; // adresse ip locale |
Re: [Debutant] Probleme connection socket
Citation:
Envoyé par Skyrunner
Citation:
Envoyé par Emmanuel Delahaye
Citation:
Envoyé par sorry60
Je débute la programmation socket sous linux, je réalise donc une mini appli client-serveur.
Serveur TCP/IP:
- l'adresse IP ne peux pas être INADDR_ANY. Il faut une adresse réelle (ou locale comme 127.0.0.1)
- msg : Ne pas confondre pointeur et tableau. sizeof n'a pas du tout le même effet. Pour msg, utiliser strlen().
- quand le dialogue est terminé, on fait un shutdown(). C'est plus sympa pour le serveur...
Serveur TCP/IP:
- msg est un pointeur non initialisé. Il faut plutôt mettre une tableau de char. Le sizeof aura alors un sens...
Détails ici
http://emmanuel-delahaye.developpez.com/reseau.htm
Je pense qu'ici Emmanuel voulait plutot dire
Client TCP/IP:
[list][*]l'adresse IP ne peux pas être INADDR_ANY. Il faut une adresse réelle (ou locale comme 127.0.0.1)[*]msg : Ne pas confondre pointeur et tableau. sizeof n'a pas du tout le même effet. Pour msg, utiliser strlen().[*]quand le dialogue est terminé, on fait un shutdown(). C'est plus sympa pour le serveur...[*]
En effet le serveur en TCP/IP peut avoir INADDR_ANY
Code:
1 2
|
localaddr.sin_addr.s_addr = INADDR_ANY; // adresse ip locale |
Oui c'est ce que je me suis dit aussi, surtout apres avoir lu sa page où il utilise INADDR_ANY dans un serveur.
Mais j'ai préféré mettre "127.0.0.1" dans les deux histoire d'etre certain que ce n'etait pas la source de l'erreur.
Re: [Debutant] Probleme connection socket
Citation:
Envoyé par sorry60
Citation:
Envoyé par Skyrunner
Citation:
Envoyé par Emmanuel Delahaye
Serveur TCP/IP:
[list][*]l'adresse IP ne peux pas être INADDR_ANY. Il faut une adresse réelle (ou locale comme 127.0.0.1)[*]msg : Ne pas confondre pointeur et tableau. sizeof n'a pas du tout le même effet. Pour msg, utiliser strlen().[*]quand le dialogue est terminé, on fait un shutdown(). C'est plus sympa pour le serveur...[*]
Je pense qu'ici Emmanuel voulait plutot dire
Client TCP/IP:
Oui, je pensais avoir corrigé cette erreur que j'avais repéré le jour même... Je fais trop de choses en même temps.