bonjour;
j'ai essayé d'exécuter le code d'un tuto CLIENT/ SERVEUR trouvé sur un autre site.
j'ai testé la partie où il y a la transmission de flux (envoie du message "bonjour").
j'ai testé l'exécutable des deux parties de codes . j'ai commencé par exécuter du serveur puis le client et ça a marché sur mon Pc mais quand j'ai essayé d'exécuter le client et le serveur sur deux Pc distinct ça n'a pas marché (j'ai commencé par exécuter le serveur sur mon PC puis le client sur un autre PC dans le même réseau, mais le client affiche Impossible de se connecter ). je veux vous informer que j'ai déjà pris considération de l'adresse IP lors de la configuration du parti client.une autre chose, les deux PC sont dans le même réseau
L'application SERVEUR :
Code : C -
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101 #if defined (WIN32) #include <winsock2.h> typedef int socklen_t; #elif defined (linux) #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #define closesocket(s) close(s) typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #define PORT 23 int main(void) { #if defined (WIN32) WSADATA WSAData; int erreur = WSAStartup(MAKEWORD(2,2), &WSAData); #else int erreur = 0; #endif SOCKET sock; SOCKADDR_IN sin; SOCKET csock; SOCKADDR_IN csin; char buffer[32] = "Bonjour !"; socklen_t recsize = sizeof(csin); int sock_err; /* Si les sockets Windows fonctionnent */ if(!erreur) { sock = socket(AF_INET, SOCK_STREAM, 0); /* Si la socket est valide */ if(sock != INVALID_SOCKET) { printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock); /* Configuration */ sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */ sin.sin_family = AF_INET; /* Protocole familial (IP) */ sin.sin_port = htons(PORT); /* Listage du port */ sock_err = bind(sock, (SOCKADDR*)&sin, sizeof(sin)); /* Si la socket fonctionne */ if(sock_err != SOCKET_ERROR) { /* Démarrage du listage (mode server) */ sock_err = listen(sock, 5); printf("Listage du port %d...\n", PORT); /* Si la socket fonctionne */ if(sock_err != SOCKET_ERROR) { /* Attente pendant laquelle le client se connecte */ printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT); csock = accept(sock, (SOCKADDR*)&csin, &recsize); printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port)); sock_err = send(csock, buffer, 32, 0); if(sock_err != SOCKET_ERROR) printf("Chaine envoyée : %s\n", buffer); else printf("Erreur de transmission\n"); /* Il ne faut pas oublier de fermer la connexion (fermée dans les deux sens) */ shutdown(csock, 2); } } /* Fermeture de la socket */ printf("Fermeture de la socket...\n"); closesocket(sock); printf("Fermeture du serveur terminee\n"); } #if defined (WIN32) WSACleanup(); #endif } /* On attend que l'utilisateur tape sur une touche, puis on ferme */ getchar(); return EXIT_SUCCESS; }
L'application CLIENT
Code : C -
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 #if defined (WIN32) #include <winsock2.h> typedef int socklen_t; #elif defined (linux) #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #define INVALID_SOCKET -1 #define SOCKET_ERROR -1 #define closesocket(s) close(s) typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #endif #include <stdio.h> #include <stdlib.h> #define PORT 23 int main(void) { #if defined (WIN32) WSADATA WSAData; int erreur = WSAStartup(MAKEWORD(2,2), &WSAData); #else int erreur = 0; #endif SOCKET sock; SOCKADDR_IN sin; char buffer[32] = ""; /* Si les sockets Windows fonctionnent */ if(!erreur) { /* Création de la socket */ sock = socket(AF_INET, SOCK_STREAM, 0); /* Configuration de la connexion */ sin.sin_addr.s_addr = inet_addr("192.168.1.2"); // prise en considération //de l'@ IP, sin.sin_family = AF_INET; sin.sin_port = htons(PORT); /* Si l'on a réussi à se connecter */ if(connect(sock, (SOCKADDR*)&sin, sizeof(sin)) != SOCKET_ERROR) { printf("Connection à %s sur le port %d\n", inet_ntoa(sin.sin_addr), htons(sin.sin_port)); /* Si l'on reçoit des informations : on les affiche à l'écran */ if(recv(sock, buffer, 32, 0) != SOCKET_ERROR) printf("Recu : %s\n", buffer); } /* sinon, on affiche "Impossible de se connecter" */ else { printf("Impossible de se connecter\n"); } /* On ferme la socket */ closesocket(sock); #if defined (WIN32) WSACleanup(); #endif } /* On attend que l'utilisateur tape sur une touche, puis on ferme */ getchar(); return EXIT_SUCCESS; }
Partager