Bonjour a tous,
Je redebute en C et c'est pas facile facile de recommencer par un pb de socket.
Si qq'1 a la moindre idée pourquoi mes 2 parties ne communiquent pas correctement, je suis preneur de toutes explications.
De même si vous avez un site cool qui explique l'utilisation de winsock.h, n'hésiter pas a faire signe.
Merci d'avance,
Mathieu
Partie client :
Partie 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 #include <winsock2.h> #include <stdio.h> #include <stdlib.h> int main(int argc,char *argv[]) { char *prog; WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKADDR_IN sin; char buffer[256]; char *msg; char *host; int boucl,erreur; host = argv[1]; msg = argv[2]; sock = socket(AF_INET, SOCK_STREAM, 0); if (sock==INVALID_SOCKET) printf("\nDesole, je ne peux pas creer la socket du a l'erreur : %d",WSAGetLastError()); sin.sin_addr.s_addr = inet_addr("127.0.0.1"); sin.sin_family = AF_INET; sin.sin_port = htons(23); erreur = connect(sock, (SOCKADDR *)&sin, sizeof(sin)); if (erreur!=0) printf("\nDesole, je n'ai pas pu ouvrir la session TCP : %d %d",erreur,WSAGetLastError()); prog=argv[0]; if (argc != 3){ printf ("Il faut 2 arguments pour executer ce programme"); exit (1); } //Envoyer la requete au serveur printf("envoi de la requete serveur \n"); write (sock,msg,strlen (msg)); //lecture de la reponse du serveur while ((boucl=read(sock,buffer,sizeof(buffer)))>0) write(1,buffer,boucl); closesocket(sock); WSACleanup(); exit; }
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 #include <winsock2.h> #include <stdio.h> #include <stdlib.h> void renvoi (int s); int main() { char *buffer[256]; int nsd,toto; WSADATA WSAData; WSAStartup(MAKEWORD(2,0), &WSAData); SOCKET sock; SOCKET csock; SOCKADDR_IN sin; SOCKADDR_IN csin; sock = socket(AF_INET, SOCK_STREAM, 0); sin.sin_addr.s_addr = INADDR_ANY; sin.sin_family = AF_INET; sin.sin_port = htons(23); bind(sock, (SOCKADDR *)&sin, sizeof(sin)); listen(sock, 5); while(1) { int sinsize = sizeof(csin); if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET) { send(csock, "Bonjour Mathieu!\r\n", 14, 0); } renvoi (csock); close (csock); } } /////Fonction de renvoi void renvoi (int s) { char buff[256]; char *fichier; char f[20]; char *mesgptr; char mesg[250]; int l, c; FILE *fp; char line [250]={0}; char *lineptr ; // lire une requete if ((l=read(s,buff,sizeof(buff))) <=0) return; buff [1]='\0';//fin de chaine fichier=f; if (!strcmp(buff,"janvier")) fichier ="janvier"; if (!strcmp(buff,"fevrier")) fichier ="fevrier"; if (!strcmp(buff,"mars")) fichier ="mars"; if (!strcmp(buff,"avril")) fichier ="avril"; if (!strcmp(buff,"Mai")) fichier ="mai"; if (!strcmp(buff,"juin")) fichier ="juin"; if (!strcmp(buff,"juillet")) fichier ="juillet"; if (!strcmp(buff,"aout")) fichier ="aout"; if (!strcmp(buff,"septembre")) fichier ="septembre"; if ((fp=fopen(fichier,"r"))==NULL) printf("erreur lors de l'ouverture du fichier"); while (fgets (line,250,fp)){ write (s,line,strlen(line)); } return ; }
Partager