Création d'une socket ..

cs_bubbless Messages postés 14 Date d'inscription vendredi 5 décembre 2003 Statut Membre Dernière intervention 1 mars 2005 - 29 févr. 2004 à 19:57
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 - 4 mars 2004 à 15:07
Bonjour !

à l'aide !! J'ai programmé tout un systèle réseau / client, que j'ai enfin pu tester grâce à l'aide d'une âme charitable sur ce forum, et je me retrouve maintenant avec un gros problème, de base pourtant : mon serveur ne veut pas créer de socket ! Il s'agit pourtant d'une simple fonction de base, mais, il me met -1, et pourtant "NO error " dans la variable perno ?? Que puis-je faire ?? Je programme sous visual c++, et voici les include que j'ai mis, ainsi que l'appel à la socket :

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

#include <winsock2.h>
#include <sys\types.h>
#pragma comment(lib, "ws2_32.lib")
/* Port d'écoute du serveur */
#define PORT 3490

my_addr.sin_family = AF_INET;my_addr.sin_port htons(PORT); my_addr.sin_addr.s_addr INADDR_ANY;
memset(&(my_addr.sin_zero), '\0', 8);

printf("%s",INADDR_ANY);if ((sockfd socket(AF_INET, SOCK_STREAM, 0)) -1)
{
printf("%d \n",sockfd);
perror("socket");
exit(1);
}

Quelqu'un peutil m'aider ?? Parce que là j'avoue que je suis plutôt désesperé: je n'ai pas la moindre idée de la solution ! J'ai essayé sur 2 ordinateurs, sans résultat, et j'ai également épluché pas mal de codes de serveur sans mieux comprendre ..; Au lancement, je rappelle , il m'indique donc :

-1
socket : no error

Merci d'avance de votre aide !!

4 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
29 févr. 2004 à 20:41
Salut,
ok 3 choses:

1) sous windows, utilise WSAGetLastError() plutot que perror, c'est bcp mieux.

2) Pour utiliser les sockets, il faut initialiser la winsock avant, ca marche mieux. Si tu avait utilisé WSAGetLastError(), il t'aurai retourné une erreur signalant que tu avais oublié d'initialiser winsock. Alors que perror lui ...
Voir du coté de WSAStartup(...) et WSACleanup(...).

3) la ligne printf("%s",INADDR_ANY);
INADDR_ANY est defini dans winsock2.h à 0, cela revient a écrire:
printf("%s", 0);
ce qui est une tres mauvaise idée.
0
cosmobob Messages postés 700 Date d'inscription mardi 30 décembre 2003 Statut Membre Dernière intervention 27 janvier 2009 4
29 févr. 2004 à 23:00
ué t'as ton erreur skeu tas oublié de faire:
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);
fo faire ca avant d'utiliser les sockets sinon voila ce qui arrive...
0
cs_kawito Messages postés 24 Date d'inscription dimanche 20 juillet 2003 Statut Membre Dernière intervention 13 décembre 2005
4 mars 2004 à 15:02
salut,

et si tu met :

my_addr.sin_addr.s_addr = htonl(INADDR_ANY);

kawito
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
4 mars 2004 à 15:07
Salut,
htonl(...) sert a inverser l'ordre des bytes mais INADDR_ANY est égal a zero donc htonl(INADDR_ANY) est aussi égal a zero, cela ne change rien.
0
Rejoignez-nous