Reseaux/Sockets pb client/serveur

Résolu
Rayn3d Messages postés 6 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 30 décembre 2009 - 16 juin 2009 à 16:57
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 - 22 juin 2009 à 11:48
Bonjour tous le monde, j'ai un probleme avec un programme en reseaux client/serveur :


lorsque j'envoie un message au client il se decoupe en plusieurs partie correspondants aux espaces. Merci de me repondre.


Serveur :


#include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <winsock.h>
    #define MYPORT 3490    /* Le port o? les utilisateurs se connecteront */


    #define BACKLOG 10     /* Nombre maxi de connections accept?es en file */


int main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
 
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;
char buffer[1024];
char message[1024];
sock = socket(AF_INET, SOCK_STREAM, 0);


sin.sin_addr.s_addr   = INADDR_ANY;
sin.sin_family    = AF_INET;
sin.sin_port    = htons(50);


bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
connect(sock,(SOCKADDR *)&sin,sizeof(sin));




  
   int sinsize = sizeof(csin);
   if((csock = accept(sock,(SOCKADDR *)&csin,&sinsize)) != INVALID_SOCKET)
   {
   send(csock,"Vous etes connectes\r\n127.0.0.1 sur le port 50\r\n\r\n",50,0);
            printf("\nIl y a un client\n");
           
            while(true)
      {
             printf("Serveur: ");          
             scanf("%s", &message);
             send(csock,message,50,0);


           
   }
            }


closesocket(sock);
WSACleanup();


    }
Client :
//CLIENT
#include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <string.h>
    #include <winsock.h>
int main()
{
char buffer[1024];
char msg[1024];


WSADATA WSAData;
WSAStartup(MAKEWORD(2,0),&WSAData);
SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;   
sock = socket(AF_INET,SOCK_STREAM,0);
int i;  
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family      = AF_INET;
sin.sin_port        = htons(50);


 


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


while(true)
{
  while(buffer[0]=='\0')
  {
    i=recv(sock, buffer, sizeof(buffer), 0);
    if(i=!false)
    {
      printf("\nFrom serveur:\n %s", buffer);
    }
  }
  buffer[0]='\0';
}


closesocket(sock);
WSACleanup();


getchar();
}
et comment faire pourle faire dans les deux sens.

3 réponses

katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
17 juin 2009 à 07:16
Salut, à priori c'est le while(true) { scanf(); } essaye avec fgets().
3
katsankat Messages postés 571 Date d'inscription vendredi 30 décembre 2005 Statut Membre Dernière intervention 12 juillet 2012 3
22 juin 2009 à 11:48
send() et recv() sont bloquantes. Donc soit le programme reçoit puis envoie, soit il reçoit en parallèle, dans un thread.

C'est quoi comme serveur sur le port 50? Les 1024 premiers ports sont dits "réservés".
3
Rayn3d Messages postés 6 Date d'inscription jeudi 17 avril 2008 Statut Membre Dernière intervention 30 décembre 2009
21 juin 2009 à 18:28
sa marche mais comment faire pour que le client reponde ?


 
0
Rejoignez-nous