Les socket

[Résolu]
Signaler
Messages postés
5
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010
-
Messages postés
5
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010
-
Bonjour,

Je me suis lancer dans le tutoriel sur les socket.
J arrive a effectuer la connexion lorsque j execute le serveur et le client sur mon pc.Mais lorsque j essaye de lancer mon client sur le pc de mon pere (qui est en reseau avec le mien),la connexion ne s effectue pas!
(Je precise que suis sous xp et le pc de mon pere est sous vista )
Voici mon code :

Serveur:
Code : C

#include <winsock2.h>
#include <stdio.h>
#include <stdlib.h>
#define PORT 23

typedef int socklen_t;

int main(void)
{

WSADATA WSAData;
int erreur = WSAStartup(MAKEWORD(2,2), &WSAData);


/* Socket et contexte d'adressage du serveur */
SOCKADDR_IN sin;
SOCKET sock;
socklen_t recsize = sizeof(sin);

/* Socket et contexte d'adressage du client */
SOCKADDR_IN csin;
SOCKET csock;
socklen_t crecsize = sizeof(csin);

int sock_err;


if(!erreur)
{
/* Création d'une socket */
sock = socket(AF_INET, SOCK_STREAM, 0);

/* Si la socket est valide */
if(sock != INVALID_SOCKET)
{
printf("La socket %d est maintenant ouverte en mode TCP/IP\n", sock);

/* Configuration */
sin.sin_addr.s_addr = htonl(INADDR_ANY); /* Adresse IP automatique */
sin.sin_family = AF_INET; /* Protocole familial (IP) */
sin.sin_port = htons(PORT); /* Listage du port */
sock_err = bind(sock, (SOCKADDR*)&sin, recsize);

/* Si la socket fonctionne */
if(sock_err != SOCKET_ERROR)
{
/* Démarrage du listage (mode server) */
sock_err = listen(sock, 5);
printf("Listage du port %d...\n", PORT);

/* Si la socket fonctionne */
if(sock_err != SOCKET_ERROR)
{
/* Attente pendant laquelle le client se connecte */
printf("Patientez pendant que le client se connecte sur le port %d...\n", PORT);
csock = accept(sock, (SOCKADDR*)&csin, &crecsize);
printf("Un client se connecte avec la socket %d de %s:%d\n", csock, inet_ntoa(csin.sin_addr), htons(csin.sin_port));
}
else
perror("listen");
}
else
perror("bind");

/* Fermeture de la socket client et de la socket serveur */
printf("Fermeture de la socket client\n");
closesocket(csock);
printf("Fermeture de la socket serveur\n");
closesocket(sock);
printf("Fermeture du serveur terminée\n");
}
else
perror("socket");

WSACleanup();

}

return EXIT_SUCCESS;
}


Et mon client:
Code : C

#include <stdio.h> // printf
#include <conio.h> // getch()
#include <winsock2.h>
#define PORT 23

void main()
{
WSADATA WSAData;
WSAStartup(MAKEWORD(2,0), &WSAData);

SOCKET sock;
SOCKADDR_IN sin;
char buffer[255];

sock = socket(AF_INET, SOCK_STREAM, 0);

sin.sin_addr.s_addr = inet_addr("127.0.0.1");
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);

connect(sock, (SOCKADDR *)&sin, sizeof(sin));
memset(buffer,0,255);
recv(sock, buffer, sizeof(buffer), 0);
printf("%s",buffer);
getch();
closesocket(sock);
WSACleanup();
}


Merci

7 réponses

Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
salut,

ton client se connecte en dur à 127.0.0.1, c'est peut là le souci.
Mets ton adresse IP style 192.168.xxx.xxx

De plus, si ce ne marche toujours pas, le pb viendra surement des firewall.
Messages postés
5
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010

Merci!!
C etait bien ca !!
Mais il y a un truc que je comprend pas,
si je veut faire un programme qui passe par le net,faudra t il que je précise mon adresse ip dans le client pour me connecter??
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Pas tout a fait !
Je connais mal, il faudrait demander à une personne qui connait un peu l'administration réseau, mais :
il faut que tu indique l'IP de ta box et après dans ton réseau local, tu dois configurer le routage. Par exemple, dire au routeur qu'il doit forwarder les infos venant du port 8000 vers l'IP 192.168.0.2
Messages postés
5
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010

Merci pour ces renseignement vais essaye de me renseigner
Merci encore @+
Messages postés
5
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010

comment on fais pour mettre le sujet en resolu??
Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Le terme résolu n'existe pas, on considère que le sujet est clos quand tu mets une réponse acceptée.
Donc, tu acceptes une réponse (de toi ou de moi).
Messages postés
5
Date d'inscription
dimanche 17 janvier 2010
Statut
Membre
Dernière intervention
20 janvier 2010

ok merci encore!