Les socket

Résolu
ben83510 Messages postés 5 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010 - 17 janv. 2010 à 18:03
ben83510 Messages postés 5 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010 - 20 janv. 2010 à 17:34
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

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
18 janv. 2010 à 08:11
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.
3
ben83510 Messages postés 5 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010
18 janv. 2010 à 14:19
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??
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
18 janv. 2010 à 15:23
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
0
ben83510 Messages postés 5 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 17:17
Merci pour ces renseignement vais essaye de me renseigner
Merci encore @+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ben83510 Messages postés 5 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 17:18
comment on fais pour mettre le sujet en resolu??
0
fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
20 janv. 2010 à 17:32
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).
0
ben83510 Messages postés 5 Date d'inscription dimanche 17 janvier 2010 Statut Membre Dernière intervention 20 janvier 2010
20 janv. 2010 à 17:34
ok merci encore!
0
Rejoignez-nous