Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C

Résolu
matad0r Messages postés 44 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 31 octobre 2010 - 26 mai 2009 à 19:16
matad0r Messages postés 44 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 31 octobre 2010 - 1 juin 2009 à 21:05
Bonjour, bonjour!

J'ai récemment créé une petite application client/serveur de rien du tout (je suis débutant), en m'aidant de ça : http://c.developpez.com/WalrusSock/ et ce que j'ai réalisé ne marche pas, du moins pas jusqu'a la fin.
Au moment de la boucle pour récupérer le send du client je m'enmèle enfin bref, ça ne marche pas! Vous pouvez essayer.

PS : Je ne cherche pas a faire un truc compliqué avec des "threads" (????) et tout ^^

Le code :

---- Client, marche parfaitement (je crois) ----
#include <stdio.h><?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

#include <stdlib.h>

#pragma comment(lib, "ws2_32.lib")

#include <winsock2.h>

#define true 1

#define false 0

typedef intbool;

 

int main(int argc, char *argv[])

{

  printf("\n   ----------------- \n  |Chat Client v0.1|\n   ----------------- \n\n   IP : ");

  char ip [14];

  scanf("%s", &ip);

  fflush(stdin);

  printf("   IP = OK\n\n");

  int port;

  choix : printf("   Connect now? [1 : Yes/2 : No] = > ");

  char yesno;

  scanf("%ld", &yesno);

  fflush(stdin);

  switch (yesno)

  {

      case1:

           printf("   Initializing connection socket...\n");

           WSADATA WSAData;

           WSAStartup(MAKEWORD(2,0), &WSAData);

           SOCKET sock;

           SOCKADDR_IN sin;

           char buffer[255];

           printf("   Loading adresses...\n");

           sock = socket(AF_INET, SOCK_STREAM, 0);

           sin.sin_addr.s_addr                 = inet_addr(ip);

           sin.sin_family                      = AF_INET;

           sin.sin_port                      = htons(312);

           printf("   Connecting on port 312...");

           bool bool1 = true;

           while (bool1 = = true )

           {

                 int sinsize = sizeof(sin);

                 if((sock = connect(sock, (SOCKADDR *)&sin, &sinsize)) != INVALID_SOCKET)

                 {

                           bool1 == false ;

                           printf(" Connected !");

                           send(sock, "Connected with Client v0.1\r\n", 28, 0);                       

                 }

           }   

           break;

      case2:

           printf("\n   No problem, bye!\n");

           break;

      default:

              printf("   Invalid command ! Retry.\n\n");

              goto choix;

              break;

                 

  }

 

  printf("\n\n\n\n\n\n\n\n\n   ");

  system("PAUSE");     

  return0;

---- Serveur, lui bug ----

#include <stdio.h>

#include <stdlib.h>

#pragma comment(lib, "ws2_32.lib")

#include <winsock2.h>

#define true 1

#define false 0

typedefintbool;

 

 

int main(int argc, char *argv[])

{

  printf("\n    ------------------\n   |Chat Server v0.1|\n    ------------------\n\n");

  printf("   Initializating...");

  WSADATA WSAData;

  WSAStartup(MAKEWORD(2,0), &WSAData);

  SOCKET sock;

  SOCKET csock;

  SOCKADDR_IN sin;

  SOCKADDR_IN csin;

  sock = socket(AF_INET, SOCK_STREAM, 0);

  printf("\n   Entering adresses...");

  sin.sin_addr.s_addr              = INADDR_ANY;

  sin.sin_family                   = AF_INET;

  sin.sin_port                     = htons(312);

  printf("\n   Binding...");

  bind(sock, (SOCKADDR *)&sin, sizeof (sin));

  listen(sock, 0);

  bool bool1 = true;

  printf("\n   Listening...");

  while(bool1 = = true )

  {

          int sinsize = sizeof(csin);

          if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)

          {

                    bool1 = false ;

                    printf(" Somebody is connected !\n\n   ");

                    bool bool2 = true;

                    while (bool2 = = true ) // A partir de là…

                    {

                         char buffer[255];

                         memset(buffer, "/r", sizeof(buffer));

                         recv(csock, buffer, sizeof(buffer), 0);

                         if (buffer ! = "");

                         {

                                    bool2 = false;

                                    printf("   Client message : %s\n",buffer);

                         }

                    }

                   

          }

}

 

 

 

 

 

 

  system("PAUSE");     

  return0;

}

Ca serait cool de m'aider
Merci d'avance !!
A voir également:

4 réponses

cs_goodboy21 Messages postés 29 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 11 avril 2010
29 mai 2009 à 22:22
salut, dans ton  client:
       // il faut remplacer

                 if((sock = connect(sock, (SOCKADDR *)&sin, &sinsize)) != INVALID_SOCKET) :la valeur de sock a été modifier et ton "send" d'après pour envoyer les données retournera une erreur                                                                                                                                                                                                    puisque ton socket n'est plus valide       

         //par

             if ((connect(sock, (SOCKADDR *)&sin, &sinsize)) ! = SOCKET_ERROR)

dans ton serveur :

   sizeof(buffer) vaut 255 . vu que ton socket est bloquant, ton "recv" ne retournera pas tant que tu n'aura pas reçu 255 octects.

  il faut dans ce cas remplacer sizeof(buffer) par 28 qui est le nombre d'octects qu'envoie le client au serveur.

bon courage dans l'exploration des sockets !!!!!!!!

    

        
3
matad0r Messages postés 44 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 31 octobre 2010
1 juin 2009 à 19:37
Merci pour cette réponse! J'essaye tout de suite!
0
matad0r Messages postés 44 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 31 octobre 2010
1 juin 2009 à 21:03
Re,
J'ai fait ce que tu m'a dit, mon serveur affiche bien " Client message : Connected with Client v0.1" mais suivi de quelques caractères étranges : " (?Æ|    "?Æ|ø?Æ|¦?Æ| "
Une idée? Merci d'avance!
0
matad0r Messages postés 44 Date d'inscription jeudi 2 octobre 2008 Statut Membre Dernière intervention 31 octobre 2010
1 juin 2009 à 21:05
Edit : A la place des ? il y a des smileys normalement mais il passent pas dans le message...
0
Rejoignez-nous