thorn74
Messages postés1Date d'inscriptionlundi 22 janvier 2007StatutMembreDernière intervention18 avril 2007
-
18 avril 2007 à 14:20
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 2012
-
18 avril 2007 à 18:12
bonjour je suis actuellement en IUT info et G un projet a faire mais je bloque je doit fair eun petit programme ou lorsqu'un ordinateur se connecte au serveur le serveur doit lui renvoyer un msg quelconque apre plusieur test j'ai finalement trouver que le probleme venait du send du coter serveur et donc par consequent le recv du coter client ne marche pas non plus donc si quelqu'un peut m'aider un peut
if(WSAStartup(MAKEWORD(2,0),&wsaDat) != 0) //makeword(2.0) specifie la version de winsock utilisé
return EXIT_FAILURE;
// ouverture socket
SOCKET sock;
SOCKADDR_IN sin;
//sin.sin_addr.s_addr etant donnée que nous somme sur le serveur on ne met pas
//d'adresse car le serveur n'a pas a connaitre l'adresse des clients
sin.sin_addr.s_addr = htonl(INADDR_ANY);
//sin.sin_family indique le type de socket utilisé pour le net on utilise le plus souvent AF_INET
sin.sin_family = AF_INET;
//sin.sin_port definie le numero du port a utilisé pour communiquer avec le client
sin.sin_port = PORT;
// la creation réelle du socket ce fait ici il faut rapeller le type de socket utiliser comme au prealable
//SOCK_STREAM veut dire ouvrent une conn entre les 2 ordinateurs directe et pourra ensuite envoyer les paquets
// que vous désirez, tandis que le SOCK_DGRAM envoie un paquet directement à la destination sans faire d'accept() ou de connect()
sock = socket(AF_INET,SOCK_STREAM,0);
//commande qui permet de rattacher le socket directement au port et a l'adresse configurer au prealable
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
printf("salut comment ca va ");
system("pause");
struct sockaddr_in service;
// spécification de la partie locale
// liaison à la socket
// boucle d'attente de connexion
// connexion et envoi du message au client
listen(sock, 3); //limitation du nombre de connexions à 3
int val = 0; //variable qui va stocké la valeur de retour qui nous indiquera si la connection est bien accepter
val = accept(sock, (SOCKADDR *)&sin, &sin_size);
if(val != INVALID_SOCKET)
{
// Fonctions à éxécuter sur le socket.
int valid=send(sock,phrasep ,5, 0);
printf("%i",valid);
system("pause");
sin.sin_addr.s_addr = inet_addr("127.0.0.1");
//sin.sin_family indique le type de socket utilisé pour le net on utilise le plus souvent AF_INET
sin.sin_family = AF_INET;
//sin.sin_port definie le numero du port a utilisé pour communiquer avec le client
sin.sin_port = PORT;
// la creation réelle du socket ce fait ici il faut rapeller le type de socket utiliser comme au prealable
//SOCK_STREAM veut dire ouvrent une conn entre les 2 ordinateurs directe et pourra ensuite envoyer les paquets
// que vous désirez, tandis que le SOCK_DGRAM envoie un paquet directement à la destination sans faire d'accept() ou de connect()
sock = socket(AF_INET,SOCK_STREAM,0);
//commande qui permet de rattacher le socket directement au port et a l'adresse configurer au prealable
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
valid=connect(sock, (SOCKADDR *)&sin, sizeof(sin));
printf("%i",valid);
valid=recv(sock, buff, sizeof(buff), 0);
printf("avant\n");
printf("%s\n%i\n",buff,valid);
printf("apres\n");
closesocket(Sock);
WSACleanup();
system("PAUSE");
return EXIT_SUCCESS;
}
cs_aardman
Messages postés1905Date d'inscriptionmercredi 22 janvier 2003StatutMembreDernière intervention17 septembre 20123 18 avril 2007 à 18:12
Salut,
Coté serveur:
- il faut utiliser htons() pour remplir de le champ sin.sin_port de la structure sockaddr_in.
- la valeur de retour de accept n'indique pas simplement si l'operation a réussi ou pas, elle indique aussi le socket a utiliser pour communiquer avec le client qui vient de se connecter. il faut donc faire ton send en utilisant le socket 'val'.
Coté client:
- pas besoin de faire de bind() avant un connect().
voila pour les erreurs de socket que j'ai vu, mais il reste plein d'autres erreurs relatives au langage, comme ca par exemple:
char cadr;
scanf("%s",&cadr);