bon voila le but est de programmer un client-serveur.
pour l'instant j'en suis au serveur et j'ai deux problèmes.
mais d'abord exposons l'horreur...
Code :
- /* -------- */
- /* -RESEAU- */
- /* -------- */
- /* ------------------- */
- /* -Fichier a inclure- */
- /* ------------------- */
- #include <stdio.h> /* pour la gestion I/O */
- #include <strings.h> /* pour bzero */
- #include <sys/types.h>
- #include <sys/socket.h> /* pour la creation du socket */
- #include <netinet/in.h>
- #include <netdb.h>
- #include <unistd.h> /* pour la fonction close */
- #include <arpa/inet.h> /* pour la fonctioon inet_ntoa */
- /* ------------------------------- */
- /* -Corps du programme principale- */
- /* ------------------------------- */
- int main(int argc, char * argv[])
- {
- /* ---------- */
- /* -variable- */
- /* ---------- */
- char *nom_serveur_a = "iparla" ; /* nom du serveur d'authentification */
- char *nom_serveur_c = "kartxila" ; /* nom du serveur de calcul */
- int port_a = 64101 ; /* port du serveur authentification */
- int port_c = 64102 ; /* port du serveur de calcul */
- int descripteur_a; /* descripteur du socket de connexion avec iparla */
- struct sockaddr_in serveur_a;
- struct hostent *adresse_a;
- /* -------------------initialisation---------------------------- */
- /* initialisation : on initialise la variable d'adresse d'iparla */
- bzero(&serveur_a, sizeof(serveur_a)); /* remise a zero de la variable serveur_a */
- adresse_a = gethostbyname(nom_serveur_a); /* on recupere l'adresse internet d'iparla */
- /* test si la fonction a trouver une adresser correspondant au serveur */
- if (adresse_a==NULL)
- {
- printf("Nom du serveur incorrect\n" );
- return -1;
- }
- serveur_a.sin_family = AF_INET;
- serveur_a.sin_port = htons(port_a);
- serveur_a.sin_addr.s_addr=((struct in_addr *)(adresse_a -> h_addr))->s_addr;
- /* -------------------creation_socket -------------------- */
- /* creation_socket : on va creer le terminal de connexion */
- if ((descripteur_a = socket(AF_INET,SOCK_STREAM,0)) < 0)
- {
- printf("Erreur lors de la creation du socket\n" );
- return descripteur_a;
- }
-
- /* -----------------bind_socket------------------- */
- /* bind_socket : on va attacher le socket a iparla*/
- if ( bind(descripteur_a, &serveur_a, sizeof(struct sockaddr_in))< 0)
- {
- printf("impossible de lier la socket au serveur\n" );
- return -1;
- }
- printf("Connexion Etablie avec %s\n", (inet_ntoa(serveur_a.sin_addr)));
- /* --------------------Fermer_socket------------------------------ */
- /* fermer_socket : on va fermer le socket relier au serveur iparla */
- close(descripteur_a);
- return 1;
- }
|
je sais que c loin d'être bien programmé mais on verra ça plus tard...
alors le premier prb vient au niveau du bind.
si je mes &serveur_a il va dans le if, mais si je mes INADDR_ANY ça me l'indique pas (et se connecte donc soit disant bien). pk ? ça veut dire que l'adresse que je récupère plus haut n'est pas valide ? (pourtant je fais un test pour savoir si le nom existe).
Deuxième prb : printf("Connexion Etablie avec %s\n", (inet_ntoa(serveur_a.sin_addr)));
dans les deux cas précédents, il me retourne comme adresse 0.0.0.0
En plus le inet_ntoa est censé prendre serveur_a.sin_addr.s_addr mais quand je mes il m'envoie : "incompatible type for argument 1 of 'inet_ntoa' ".
c pas logique il devrait plutot m'indiquer le contraire non ?