Client serveur

Signaler
Messages postés
11
Date d'inscription
jeudi 19 janvier 2006
Statut
Membre
Dernière intervention
25 juillet 2006
-
Messages postés
32
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
14 avril 2009
-
Je que le serveur et le client échange par internet.

Le serveur ne voit pas de client connecté

Et le buffer du client contient nimporte quoi.
En gros ils ne se connecte pas.

Je pense que le probleme vient de ladresse IP ou du port...

SERVEUR:

#include <winsock2.h>//winsock.h
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")//wsock32.lib
void main()
{
int sinsize;
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);//MAKEWORD(1,0)




SOCKET sock;
SOCKET csock;
SOCKADDR_IN sin;
SOCKADDR_IN csin;


sock = socket(AF_INET,SOCK_STREAM,0);
sin.sin_addr.s_addr = INADDR_ANY;//htonl(INADDR_ANY);
sin.sin_family  = AF_INET;
sin.sin_port  = htons(80);//23 ou 7000 ou 80
bind(sock, (SOCKADDR *)&sin, sizeof(sin));
listen(sock, 0);
puts("pret");


while(1)
{
sinsize = sizeof(csin);
if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) != INVALID_SOCKET)
{
puts("un socket s'est connecté");
send(csock, "Hello World!\r\n", 14, 0);
}
}




puts("FIN");
}

CLIENT:
#include <winsock2.h>//winsock.h
#include <stdio.h>
#include <stdlib.h>
#pragma comment(lib, "ws2_32.lib")//wsock32.lib
void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);//MAKEWORD(1,0)


char *buffer = new char[255];


SOCKET sock;
SOCKADDR_IN sin;
sock = socket(AF_INET,SOCK_STREAM,0);
sin.sin_addr.s_addr = inet_addr("212.234.59.105:80");//212.234.59.105
sin.sin_family  = AF_INET;
sin.sin_port  = htons(80);//6667 ou 7000 ou 80


connect(sock, (SOCKADDR *)&sin, sizeof(sin));




recv(sock, buffer, sizeof(buffer), 0);


printf("%s\n",buffer);


closesocket(sock);
WSACleanup();
puts("FIN");
system("PAUSE");
}

4 réponses

Messages postés
755
Date d'inscription
samedi 15 mai 2004
Statut
Membre
Dernière intervention
30 janvier 2011

un truc que je ne comprends pas, c'est :
que tu a poster ton post dans la categori LINUX et que tu utilise Winsock :)
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,

Comme d'hab, sans traitement/affichage d'erreur, c'est difficile de debuguer un prog.

Si recv() renvoi la valeur -1 c'est que ton prog n'est pas connecté au serveur.
et comme buffer n'est pas initialisé et qu'il recoi rien c'est normale que c'a affiche n'importe quoi( car la plage memoir qu'il lui est attribué contient ce quel est depuis avant le lancement du prog).
int verif=999;
if(connect(sock, (SOCKADDR *)&sin, sizeof(sin)))
{
  verif = recv(sock, buffer, sizeof(buffer), 0);
  printf("Connecté ou pas:%d %s\n", verif, buffer);
}
printf("Connecté ou pas: %d", verif);

MaLaDeDeDe 97one 
Messages postés
32
Date d'inscription
vendredi 26 mai 2006
Statut
Membre
Dernière intervention
14 avril 2009

Un bon truc pour bien gerer les erreurs c evidamment d'inclure errno pour la gestion
des bonne vielles erreur:
#include <errno.h>

if(    (sock=socket(AF_INET,SOCK_STREAM,0)<0)
             perror("Socket");

if(    (host=gethostbyname(hostname)    )==NULL)
               herror("DNS"); //pour la gestion d'erreur dns

A+