begin process at 2012 05 28 08:49:23
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Windows

 > 

Réseau & Internet

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

mardi 26 mai 2009 à 19:16:15 | Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C]

matad0r

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>

#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 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 !!

vendredi 29 mai 2009 à 22:22:26 | Re : Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C]

goodboy21

Réponse acceptée !
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 !!!!!!!!

    

        


lundi 1 juin 2009 à 19:37:45 | Re : Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C]

matad0r

Merci pour cette réponse! J'essaye tout de suite!
lundi 1 juin 2009 à 21:03:29 | Re : Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C]

matad0r

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!
lundi 1 juin 2009 à 21:05:17 | Re : Client / Serveur => Je m'enmèle les pinceaux avec le buffer, les boucles etc. [C]

matad0r

Edit : A la place des ? il y a des smileys normalement mais il passent pas dans le message...


Cette discussion est classée dans : buffer, printf, client, sin, sock


Répondre à ce message

Sujets en rapport avec ce message

client serveur [ par elanspeech ] Bonjour,Je suis en train de programmer un petit client serveur en C pour windows avec dev-c++. J'obtiens l'erreur suivante a la compilation : D:\DEV-C [C] Probleme Socket [ par firemax ] Voila le code : En gros je sais pas qu'elle est le probleme et je n'est aucun message d'erreur :D [code]#include "lib.h" int main() {     int sock Socket Server/Client [ par XKaliBur ] Je suis débutant et je voudrais faire en sorte d'envoyer un message au mon serveur et des que ce dernier reçoit un message, il réponde en fonction de smtp en socket [ par XKaliBur ] J'ai essayer de faire le plus simple possible mais ça marche pas... est-ce que quelqu'un aurais une idée... Parce que quand je le fait en telnet ça ma Socket en C [ par RM50Man ] WSADATA ws;                    WSAStartup(MAKEWORD(2,0), &ws);              &n Problème de Socket(recv) [ par YnOThAr ] Voila je suis en train d'essayer de faire un client FTp mais j'ai vraiment du mal...mon preblème c ke j'arrive pas à réceptionner les réponses du serv link avec GCC [ par mrjulien ] Bonjours a tous.Je compile avec gcc sous windows (grâce a mingw). Je ne souhaite pas vous ennuyer en créant un topic redondant, mais je n'arrive pas à Fiabiliser transfert par socket [ par masseur ] Salut. Je vais vous expliquer mon petit problème. Je crée un client et un serveur. Des que le serveur recoit une demande il envoie un fichier en ut pb socket [ par surfeurnet ] voici mon programme qui a pour l'instant pour unique but de se connecter à un serveur :# include # include # pragma comment (lib,"w32_32.lib")char ip,


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,764 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales