Bonjour à tous,

Voila je me met à la programmation réseaux et j'ai commencé par une simple appli console client-serveur. Mon serveur est censé recevoir des messages du client et les afficher , seulement voila : Il ne le fait pas, la connection se passe très bien , tout est testé et cela fonctionne. Le problème est que recv est censé attendre après une reception de donnée, mais sur mon serveur juste après la connection du client, l'instruction recv s'éxécute alors que je n'ai mm pas eu le temps d'envoyé un message avec mon client :s . Et évidement cela plante.

Si quelqu'un pouvait m'aider , je join à ce post le code de mon serveur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <stdio.h>
#include <winsock2.h>
 
int main(void){
    char szMsg[600+1]="";
    struct sockaddr_in saiServerSock = {0};
    struct sockaddr_in saiClientSock = {0};
    int iServerSockID;
    int iClientSockID;
    int iSizeSockClient;
    int iRecvData;
    WSADATA wsaData;
 
    WSAStartup(MAKEWORD(2,0),&wsaData);
 
    iServerSockID = socket(AF_INET,SOCK_STREAM,0);
 
    if(iServerSockID == -1)
    {
        printf("\n<error> Function : socket()");
        fflush(stdin);
        scanf("%*c");
        WSACleanup();
        return 1;
    }
 
    saiServerSock.sin_family = AF_INET;
    saiServerSock.sin_port = htons(2000);
    saiServerSock.sin_addr.s_addr = INADDR_ANY;
 
    /* mise sur écoute du port. */
    bind(iServerSockID,(struct sockaddr*)&saiServerSock,sizeof(saiServerSock)); /* Lie le socket à un port. */
 
    listen(iServerSockID,2); /* 2 : Nombre d'écoute possible du serveur. */
 
    iSizeSockClient = sizeof(saiClientSock);
 
    if(iClientSockID = accept(iServerSockID,(struct sockaddr*)&saiClientSock,&iSizeSockClient) != INVALID_SOCKET){
    printf("\n::::: Client connected");
 
    short sContinue = 1;
 
    while(sContinue)
    { 
 
            iRecvData = recv(iClientSockID,szMsg,sizeof(szMsg)-1,0);
            if(iRecvData == SOCKET_ERROR){
                printf("\n <error> function : recv()");
                sContinue=0;
            }else{
                szMsg[iRecvData] = 0;
                printf("\n Message : %s",szMsg);
            }
    }
    }
 
    closesocket(iServerSockID);
    WSACleanup();
}
J'espère vraiment que quelqu'un sait le pourquoi de ceci.
Merci d'avance.

++
deck_bsd