Bonjour,
Voila j'ai un problème au niveau du client et je ne sais pas vraiment pourquoi...
j'ai 3 fichiers pour le serveurs et 3 fichiers pour le client.
Le Client :
connexion.c
Je n'ai pas encore implémenté reception(SOCKET sock);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #include "connexion.h" #include <stdio.h> SOCKET initialiser () { SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); if(sock == SOCKET_INVALIDE) { printf("Socket invalide pour socket()\n"); close(sock); exit(1); } return sock; } SOCKET connexion (SOCKET sock, char adress_ip[]) { int erreur; SOCKADDR_IN sin = { 0 }; sin.sin_addr.s_addr = inet_addr(adress_ip); sin.sin_port = htons(10000); sin.sin_family = AF_INET; printf("essai\n"); erreur = connect(sock, (SOCKADDR *) &sin, sizeof(SOCKADDR)); if(erreur == ERREUR_SOCKET) { printf("Socket invalide pour connect()\n"); close(sock); exit(1); } return sock; } void reception (SOCKET sock);
connexion.h
main connexion :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37
38 #ifndef CONNEXION_H #define CONNEXION_H #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <netdb.h> typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; typedef struct in_addr IN_ADDR; #define SOCKET_INVALIDE -1 #define ERREUR_SOCKET -1 /* initialisation du socket retourne le socket initialisé */ SOCKET initialiser (); /* connexion au serveur avec le socket initialisé retourne la connexion */ SOCKET connexion (SOCKET sock, char adress_ip[]); /* reception des données du serveur ne retourne rien */ void reception (SOCKET sock); #endif
Le Serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 #include "connexion.h" int main (void) { SOCKET client; char adress_ip[16] = ""; printf("Adresse IP de l'ordinateur : "); fgets(adress_ip,sizeof adress_ip, stdin); client = initialiser(); client = connexion(client,adress_ip); if(client == ERREUR_SOCKET || client == SOCKET_INVALIDE) { printf("Connexion impossible\n"); }else{ printf("Connexion réussie\n"); } return 0; }
ServeurConnexion.c :
ServeurConnexion.h :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37
38
39
40
41
42
43
44
45
46
47
48
49 #include "ConnexionServeur.h" #include <stdio.h> SOCKET initialiser() { SOCKET sock = socket(AF_INET, SOCK_STREAM, 0); if(sock = SOCKET_INVALIDE) { printf("Socket invalide pour socket()\n"); close(sock); } return sock; } SOCKET ecoute(SOCKET sock) { int erreur; SOCKET serv_sock; SOCKADDR_IN sin = { 0 }; SOCKADDR_IN serv_sin = { 0 }; int sin_size = sizeof serv_sin; sin.sin_addr.s_addr = htonl(INADDR_ANY); sin.sin_family = AF_INET; sin.sin_port = htons(10000); erreur = bind (sock, (SOCKADDR *) &sin, sizeof sin); if(erreur == ERREUR_SOCKET) { printf("Socket invalide pour bind()\n"); close(sock); } erreur = listen (sock, 1); if(erreur == ERREUR_SOCKET) { printf("Socket invalide pour listen()\n"); close(sock); } serv_sock = accept (sock, (SOCKADDR *) &serv_sin, &sin_size); if(serv_sock == SOCKET_INVALIDE) { printf("Socket invalide pour accept()\n"); close(serv_sock); close(sock); } return serv_sock; } void reception(SOCKET sock);
Le main pour le serveur :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
37
38 #ifndef CONNEXION_H #define CONNEXION_H #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <netdb.h> typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; typedef struct in_addr IN_ADDR; #define SOCKET_INVALIDE -1 #define ERREUR_SOCKET -1 /* initialisation du socket retourne le socket initialisé */ SOCKET initialiser (); /* connexion au serveur avec le socket initialisé retourne la connexion */ SOCKET ecoute (SOCKET sock); /* reception des données du serveur ne retourne rien */ void reception (SOCKET sock); #endif
Le problème est que lorsque je lance le serveur, il passe par tous les messages d'erreurs...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include "ServeurConnexion.h" int main (int argc, char ** args) { SOCKET serveur; SOCKET discussion_client; serveur = initialiser(); discussion_client = ecoute(serveur); if((discussion_client != SOCKET_INVALIDE) && (discussion_client != ERREUR_SOCKET)) { printf("Connexion établie"); } return 0; }
Je n'ai pas encore essayé le Client.
Merci d'avance pour votre aide.
Partager