Salut a tous
J'ai un probleme dans mon serveur et je ne sais pas comment le resoudre. Le client se connecte bien et envoie le bon nombre de caracteres et le serveur accepte la demande de connexion mais le recv renvoie la valeur -1 et le buffer reste inchangé. Toutes les sockets sont positives.
voici le source du serveur :
/************************
Le Serveur
************************/
#include <winsock2.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#define PORT 6000
#define MAX_CLIENTS 5 // just used for cl
void serveur()
{
SOCKET socketserveur;
//int Appelantlen;
int i=0;
SOCKADDR_IN localaddr ;
char buf[11];
int nbcar = 0;
int size;
WSADATA wsaData;
WORD wVersionRequested;
wVersionRequested = MAKEWORD( 2, 2 );
WSAStartup( wVersionRequested, &wsaData );
int number_of_clients = 0;
unsigned int client[MAX_CLIENTS]; // socket handles to clients
sockaddr client_sock[MAX_CLIENTS]; // info on client sockets
int error = WSAStartup (0x0202, &wsaData); // Fill in w
if (error)
{ // there was an error
return;
}
if (wsaData.wVersion != 0x0202)
{ // wrong WinSock version!
WSACleanup (); // unload ws2_32.dll
return;
}
socketserveur = socket(AF_INET, SOCK_STREAM, 0);
localaddr.sin_family = AF_INET; /* Protocole internet */
localaddr.sin_addr.s_addr = htonl(INADDR_ANY); /* Toutes les adresses IP de la station */
localaddr.sin_port = htons(PORT); /* port d'écoute par défaut au dessus des ports réservés */
if(socketserveur == INVALID_SOCKET)
{
perror("socket");exit(3);
}
if (bind(socketserveur,(LPSOCKADDR)&localaddr,sizeof(localaddr) ) == SOCKET_ERROR)
{
printf("erreur bind\n");
exit(1);
}
if (listen(socketserveur,10) == SOCKET_ERROR)
{
printf("erreur listen\n");
exit(2);
}
sprintf(buf, "Whatever");
printf("buf = %s\n",buf);
while (number_of_clients < MAX_CLIENTS) // let MAX_CLIENTS connect
{ size = sizeof(struct sockaddr);printf("size %d",size);
client[number_of_clients] = // accept a connection
accept (socketserveur,(LPSOCKADDR)&client_sock[number_of_clients],&size);
puts("pret");
if (client[number_of_clients] == INVALID_SOCKET)
{ // error accepting connection
puts("pret");
WSACleanup ();
return;
}
else
{ // client connected successfully
// start a thread that will communicate with client
nbcar = recv(socketserveur, buf, sizeof(buf),0);
printf("nb = %d",nbcar);
printf("buffer = %s\n",buf);
number_of_clients++;
}
}
//Appelantlen = sizeof(localaddr);
//accept(socketserveur,(sockaddr)&localaddr, &Appelantlen);
shutdown(socketserveur,0);
WSACleanup( );
}
void main()
{
char car = 'a';
printf("%x\n", car);
serveur();
}
/**********************
Le Client
**********************/
#include <winsock2.h>
#include <winsock.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
#define PORT 6000
void main(int argc, char **argv){
SOCKET socketclient;
int i=0;
int nbcar = 0;
WSADATA wsaData;
WORD wVersionRequested;
int test,con;
int taille;
SOCKADDR_IN name;
wVersionRequested = MAKEWORD( 2, 0 );
WSAStartup( wVersionRequested, &wsaData );
socketclient = socket(AF_INET, SOCK_STREAM, 0);
printf("socket = %d \n",socketclient);
//Affectation des informations sur l'addresse du serveur auquel on veut se connecter
//char FAR * nom_machine;
//struct in_addr in;
const char * Host="192.168.2.1";
name.sin_family = AF_INET;
name.sin_port = htons(PORT);
name.sin_addr.S_un.S_addr = inet_addr(Host);
taille = sizeof(struct sockaddr);
printf("addresse=%ld\n",&name.sin_addr.S_un.S_addr);
con = connect(socketclient,(LPSOCKADDR)&name,taille);
printf("con = %d",con);
char buffer[11]; // buffer that is 11 characters big
sprintf (buffer, "ca marche");
test =send (socketclient, buffer, sizeof(buffer), 0);
printf("test = %d",test);
closesocket(socketclient);
}