Reseaux/Sockets pb client/serveur [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
30 décembre 2009
-
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
-
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

Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
Salut, à priori c'est le while(true) { scanf(); } essaye avec fgets().
Messages postés
571
Date d'inscription
vendredi 30 décembre 2005
Statut
Membre
Dernière intervention
12 juillet 2012
3
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".
Messages postés
6
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
30 décembre 2009

sa marche mais comment faire pour que le client reponde ?