Bonjour,
Je suis sous mac et linux sous machine virtuelle , et mon programme client ne veut pas fonctionner ..
Quelqu'un saurait me dire d'ou vient le soucis ?
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 // // main.cpp // Projet_Systeme_Client // // PARTIE CLIENT // // ---- Inclusion des fichiers nécéssaires ---- // #include <iostream> using namespace std; #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) // Fonction servant à fermer une socket . typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #include <stdio.h> #include <stdlib.h> #define PORT 23 int main(void) { int erreur=0; SOCKET sock; SOCKADDR_IN sin; 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(PORT); /* Si le client arrive à se connecter */ if(connect(sock, (SOCKADDR*) &sin,sizeof(sin)) != SOCKET_ERROR) // Fonciton connect pour établir une connexion du côté client :-) cout << " Connexion à " << inet_ntoa(sin.sin_addr) << " sur le port " << htons(sin.sin_port); else cout << " Impossible de se connecter " << endl; /* On ferme la socket précédemment ouverte */ closesocket(sock); } return EXIT_SUCCESS; }
J'espère que vous saurez m'aider , car j'ai beau chercher , je ne trouve pas ..Il m'affiche : " impossible de se connecter " .
----------------------------------------------
De même que le programme serveur , Il m'écrit " bind " , du coup le soucis se situe au niveau du bind .
Je précise que ce sont casiment les même programme que le cours .
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
102
103
104
105
106
107
108
109
110
111 // // main.cpp // Projet_Système_Socket // // PARTIE SERVEUR // // ---- Inclusion des fichiers nécéssaires ---- // #include <iostream> using namespace std; #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) // Fonction servant à fermer une socket . typedef int SOCKET; typedef struct sockaddr_in SOCKADDR_IN; typedef struct sockaddr SOCKADDR; #include <stdio.h> #include <stdlib.h> #define PORT 23 int main(void) { int erreur=0; // Déclaration de la socket . Pour le créer , il faudra utiliser la fonction int socket (...) . /* Socket et contexte d'adressage du serveur */ SOCKADDR_IN sin; SOCKET sock; socklen_t recsize=sizeof(sin); /* Socket et contexte d'adressage du client */ SOCKADDR_IN csin; SOCKET csock; socklen_t crecsize=sizeof(csin); int sock_err; if(!erreur) { /* Création d'une socket */ sock=socket(AF_INET,SOCK_STREAM,0); // AF_INET : Domain TCP/IP -- SOCK_STREAM : type de service pour le TCP/IP -- Protocol : 0 pas utile . /* Si la socket est valide */ if (sock!=INVALID_SOCKET) { cout << " La socket " << sock << " est maintenant ouverte en mode TCP/IP " << endl; /* Configuration */ sin.sin_addr.s_addr=htonl(INADDR_ANY); /* s_addr fait partie de la struc in_addr -- htonl permet de renvoyer le param --INNADDR_ANY signifie que le socket peut être associé à n'importe quel adresse de la machine . Donc adresse ip automatique . */ sin.sin_family=AF_INET; /* Protocole familial (IP) */ sin.sin_port=htons(PORT); sock_err= bind(sock, (SOCKADDR*) &sin ,recsize); // Lier le socket à un point de communication défini par une adresse et un port , établir la connexion avec le client . if(sock_err !=SOCKET_ERROR) { /* Démarrage du listage ( mode serveur ) */ sock_err=listen(sock,5); // Fonction listen mettant la socket en état d'écoute -- 5 = Nombre max de connexions pouvant être mis en attente . cout << " Listage du port " << PORT << endl; /* Si la socket fonctionne */ if (sock_err != SOCKET_ERROR) { /* Attente pendant laquelle le client se connecte */ cout << "Patientez pendant que le client se connecte sur le port " << PORT << endl; csock= accept(sock,(SOCKADDR*) &csin, &crecsize); // csock : socket client et csin : son contexte d'adressage . // Fonction accept permet la connexion entre le client et le serveur en acceptant un appel de connexion -- sock : Socket serveur -- (SOCKADDR*) &csin : pointeur sur le contexte d'adressage -- &taille : il faut créer une variable , pas comme avec bind . cout << " Un client se connecte avec la socket " << csock << " de " << inet_ntoa(csin.sin_addr) << ":" << htons(csin.sin_port) << endl; } else cerr << "listen"; } else cerr << "bind"; /* Fermeture de la socket client et de la socket serveur */ cout << " Fermeture de la socket client " << endl; closesocket(csock); cout << " Fermeture de la socket serveur " << endl; closesocket(sock); cout << " Fermeture du serveur terminée " << endl; } else cerr << "socket"; } return EXIT_SUCCESS; }
Partager