bonjour tout le monde !
J'ai comme projet de faire un programme répartissant des calculs sur plusieurs ordinateurs. J'ai fait un programme client et un programme serveur (pour l'instant aucune donnée ne transite entre les deux, c'est un simple test de niveau très basique).
Mon problème est le suivant: cela marche lorsque je démarre le client et le server sur mon ordi (en localhost) mais j'aimerais rendre cela possible en démarrant le server sur mon ordi et le client sur un autre ordi (voir plusieurs clients sur plusieurs ordi). Si quelqu'un avait une idée, merci d'avance !
Code du 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
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 #if defined (WIN32) #include <winsock2.h> #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> int main (void) { #if defined (WIN32) WSADATA WSAData; int erreur = WSAStartup(MAKEWORD(2,0), &WSAData); #else int erreur = 0; #endif SOCKADDR_IN sin = {0}; SOCKET sock; int recsize = (int) sizeof sin; int sock_err; if(!erreur) { // Création d'une socket 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 = *(IN_ADDR *)(INADDR_ANY); // Adresse IP automatique sin.sin_family = AF_INET; // protocol familial (IP) sin.sin_port = htons (23); // listage du port sock_err = bind (sock, (SOCKADDR *) &sin, recsize); //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", 23); //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", 23); sock = accept (sock, (SOCKADDR *) &sin, &recsize); printf ("Un client se connecte avec la socket %d de %s:%d\n", sock, inet_ntoa (sin.sin_addr), htons (sin.sin_port)); system("pause"); } } // fermeture de la socket printf ("Fermeture de la socket\n"); closesocket(sock); printf ("Fermeture du serveur terminée\n"); } #if defined (WIN32) WSACleanup(); #endif } return EXIT_SUCCESS; }
code du client :
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 #if defined (WIN32) #include <winsock2.h> #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> int main (void) { #if defined (WIN32) WSADATA WSAData; int erreur = WSAStartup(MAKEWORD(2,0), &WSAData); #else int erreur = 0; #endif SOCKET sock; SOCKADDR_IN sin; char buffer[512] = ""; int i; 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("127.0.0.1"); sin.sin_family = AF_INET; sin.sin_port = htons(23); // Si le client arrive à se connecté if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)) != SOCKET_ERROR) { printf("Connexion à %s sur le port %d\n", inet_ntoa (sin.sin_addr), htons(sin.sin_port)); system("pause"); } else printf("Impossible de se connecter\n"); // On ferme la socket précédemment ouverte closesocket(sock); #if defined (WIN32) WSACleanup(); #endif } return EXIT_SUCCESS; }
edit: même en remplacant 127.0.0.1 par l'ip de mon ordi dans le code du client, le client n'arrive pas à se connecter à mon ordi
Partager