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 :
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;
}
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
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 ;                                             
 
}