Problème SDL_Net

a marqué ce sujet comme résolu.

Oui, mais ça ne fonctionne pas. (Pire encore, le client se ferme lorqu’il doit envoyer les données, mais uniquement avec le serveur que j’ai programmé, avec netcat il n’y a pas de problème et les bonnes données sont envoyées)

Le code du serveur:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
        ready = SDLNet_CheckSockets(socketset,10);

        if(ready==-1) {
            printf("SDLNet_CheckSockets: %s\n", SDLNet_GetError());
            fprintf(stderr,"SDLNet_CheckSockets: %s\n", SDLNet_GetError());
        }
        else if(ready)
        {
            if(SDLNet_SocketReady(tcpserveur)) {
                if ((n = SDLNet_TCP_Recv(tcpserveur, chaine, sizeof chaine))<=0) {
                    fprintf(stderr,"Erreur lors de la réception : %s\n", SDLNet_GetError());
                    return EXIT_FAILURE;
                }
                else
                {
                fichier = fopen("niveau.lvl","w+");
                chaine[n] = 0;
                fputs(chaine,fichier);
                fclose(fichier);
                }
            }
        }
+0 -0

C’est difficile à dire comme cela vu que l’on dispose que d’une partie de ton code. De mon côté, je n’ai pas de problème en suivant la documentation et avec le code suivant (je n’emploie pas la fonction SDLNet_SocketReady() dans mon exemple puisqu’il n’y a qu’une seule socket).

 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
60
61
62
63
64
65
#include <stdio.h>
#include <stdlib.h>

#include <SDL/SDL_net.h>


int
main(void)
{
    char buf[255];
    IPaddress ip;
    TCPsocket tcpserveur;
    SDLNet_SocketSet set;
    int n;

    if (SDLNet_Init() != 0) {
        fprintf(stderr, "Erreur d'initialisation de SDL_Net\n");
        return EXIT_FAILURE;
    }
    if (SDLNet_ResolveHost(&ip, "127.0.0.1", 5790) != 0) {
        fprintf(stderr,"SDLNet_ResolveHost: %s\n", SDLNet_GetError());
        return EXIT_FAILURE;
    }

    tcpserveur = SDLNet_TCP_Open(&ip);

    if (tcpserveur == NULL) {
        fprintf(stderr,"SDLNet_TCP_Open: %s", SDLNet_GetError());
        return EXIT_FAILURE;
    }

    set = SDLNet_AllocSocketSet(5);

    if (set == NULL) {
        fprintf(stderr,"SDLNet_AllocSocketSet: %s\n", SDLNet_GetError());
        return EXIT_FAILURE;    
    }
    if (SDLNet_TCP_AddSocket(set, tcpserveur) < 0) {
        fprintf(stderr,"SDLNet_AllocSocketSet: %s\n", SDLNet_GetError());
        goto fail;
    }
    if ((n = SDLNet_CheckSockets(set, -1)) > 0) {
        if (n == -1) {
            fprintf(stderr,"SDLNet_CheckSockets: %s\n", SDLNet_GetError());
            goto fail;
        }
        if ((n = SDLNet_TCP_Recv(tcpserveur, buf, sizeof buf - 1)) <= 0) {
            fprintf(stderr,"SDLNet_TCP_Recv: %s\n", SDLNet_GetError());
            goto fail;
        } 
    }

    buf[n] = 0;
    printf("buf: %s\n", buf);

    if (SDLNet_TCP_Send(tcpserveur, buf, n) < n) {
        fprintf(stderr,"SDLNet_TCP_Send: %s\n", SDLNet_GetError());
        goto fail;
    }

    return 0;
fail:
    SDLNet_FreeSocketSet(set);
    return EXIT_FAILURE;
}
+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte