Bonjour, je suis nouveau sur ce site (dont, à première vue, les cours sont très intéressants ) et j’ai un problème: je suis en train de programmer un petit jeu en réseau (en C avec SDL), mais je rencontre un problème: la réception des données avec SDLNet_TCP_Recv();
(La partie du programme qui pose problème, je précise qu’elle n’est pas dans une boucle.)
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 | char chaine[NBTILEX*NBTILEY+1]; IPaddress ip; TCPsocket tcpserveur; int result; 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,"Erreur de connection à l'ip: %s",SDLNet_GetError()); return EXIT_FAILURE; } FILE *fichier = NULL; fichier = fopen("niveau.lvl","r+"); SDLNet_TCP_Recv(tcpserveur, chaine, strlen(chaine)); fprintf(fichier,"%s", chaine); SDLNet_TCP_Send(tcpserveur, chaine, strlen(chaine)); |
Pour faire des tests, j’utilise comme serveur un petit programme en Perl:
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 | use Socket; use strict; my $port = shift || 5790; # port my $proto = getprotobyname('tcp'); # protocole my $serveur = "localhost"; # adresse IP du serveur (ici localhost) socket(SOCKET, PF_INET, SOCK_STREAM, $proto) or die "Echec de creation du serveur: $! \n"; # cree le socket setsockopt(SOCKET, SOL_SOCKET, SO_REUSEADDR, 1) or die "Can't set socket option to SO_REUSEADDR $!\n"; # options du socket bind(SOCKET, pack_sockaddr_in($port, inet_aton($serveur))) or die "Erreur bind au port $port \n"; # attribue le socket a l'IP et au port listen (SOCKET, 1) or die "Listen: $!"; # ecoute les connexion pour savoir si un client se connecte print "Serveur lance sur le port: $port \n"; my $client_addr; my $line; while ($client_addr = accept(NEW_SOCKET, SOCKET)) { my $nameClient = gethostbyaddr($client_addr, AF_INET); print "Connexion recue par: $nameClient \n"; my $message = <>; chomp $message; send(SOCKET, "$message", 0); recv(NEW_SOCKET, $line, 2000 , 0); print("$line \n"); close NEW_SOCKET or die "erreur de fermeture du client \n"; #on ferme la connexion print ("Connection termine \n"); close SOCKET or die "Erreur de fermeture du socket: $! \n"; print "Socket ferme \n"; } ` |
Mais la réception ne semble pas se faire (je n’obtiens rien dans le fichier "niveau.lvl" en envoyant "333333333" avec le sevreur par exemple) et l’accusé de réception (SDLNet_TCP_Send();) n’est pas reçu par le serveur…
J’aimerai donc bien savoir où sont mes erreurs.
Merci
+0
-0