Socket sur WAN

Signaler
Messages postés
4
Date d'inscription
dimanche 4 mai 2008
Statut
Membre
Dernière intervention
26 mai 2009
-
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
-
Bonjour,
Voila mon probleme, j'ai une application client et une server, les 2 communiquent a merveille sur la loopback adresse (127.0.0.1-255), en LAN (192.168.1.32-64), mais pas sur WAN (77.234.52.3). Je sais plus quoi faire, personne peut m'aider on m'a dit des betises, que c'etait le port forwarding, le NAT, mon routeur, etc. j'ai tout essaye sans resultat y a-t-il une difference dans la maniere de programmer si on se trouve sur LAN ou WAN.



Merci pour toute reponse.



<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" /??>

 






CLIENT








 







#include <stdio.h>







#include <stdlib.h>







#include <winsock.h>








 







#define port 23








 







int main()







{








                char buffer[32] = "";








  










                WSADATA wsadata;








                int error = WSAStartup(MAKEWORD(2, 0), &wsadata);








 








                SOCKET ssocket;








    SOCKADDR_IN sin;








 








                if(!error)








    {








        ssocket = socket(AF_INET, SOCK_STREAM, 0);








 








                               sin.sin_addr.s_addr = inet_addr("192.168.1.34");








                               //sin.sin_addr.s_addr = inet_addr("127.0.0.1");








                               //sin.sin_addr.s_addr = inet_addr("88.207.235.123");








        sin.sin_family = AF_INET;








       
sin.sin_port = htons(port);




 






                              
if(connect(ssocket, (SOCKADDR *)&sin, sizeof(sin)) != SOCKET_ERROR)








                               {








                                               printf("\nConnected to %s with port %d\n", inet_ntoa(sin.sin_addr), htons(sin.sin_port));








                                               if(recv(ssocket, buffer, 32, 0) != SOCKET_ERROR)








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








                               }








                               else








                               {








                                               printf("\nConnection error!\n");








                               }








 








                               closesocket(ssocket);








                }








 








                WSACleanup();








   










                system("PAUSE");








 








                return 0;







}








 








 







SERVER








 







#include <stdio.h>







#include <stdlib.h>







#include <windows.h>







#include <winsock.h>








 







#define port 23








 







int main()







{








                char buffer[32] = "Server on standby!!!";








 








    printf("\nStarting server...\n");








               










    WSADATA wsadata;








                int error = WSAStartup(MAKEWORD(2, 0), &wsadata);








               










                SOCKET ssocket;








                SOCKADDR_IN sin;








                SOCKET csocket;








                SOCKADDR_IN cin;








               










                int recsize = sizeof cin;








                int ssocket_err;








 








                if(!error)








                {








                               ssocket = socket(AF_INET, SOCK_STREAM, 0);








 








                               if(ssocket != INVALID_SOCKET)








                               {








                                               printf("Socket %d open in TCP/IP mode\n", ssocket);








 








                                               sin.sin_addr.s_addr       = htonl(INADDR_ANY);








                                               sin.sin_family                   = AF_INET;








                                              
sin.sin_port                       = htons(port);




 






                                              
ssocket_err = bind(ssocket, (SOCKADDR *) &sin, sizeof sin);








 








                                               if(ssocket_err != SOCKET_ERROR)








                                               {








                                                               printf("Listening on port %d...\n", port);








 








                                                               ssocket_err = listen(ssocket, 1);








                                              
               










                                                               if(ssocket_err != SOCKET_ERROR)








                                                               {








                                                                              printf("Wait till client has connected to port %d...\n", port);








 








                                                                              csocket = accept(ssocket, (SOCKADDR *) &cin, &recsize);








 








                                                                              printf("Client is connected with socket %d de %s:%d\n", csocket, inet_ntoa(cin.sin_addr), htons(cin.sin_port));








               










                                                                              ssocket_err = send(csocket, buffer, 32, 1);








                                                                             










                                                                              if(ssocket_err != SOCKET_ERROR)








                    {








                                   printf("String sended: %s\n", buffer);








                    }








      
             else








                    {








                                   printf("Transmission error\n");








                    }








 








                                                                              shutdown(csocket, 1);








                                                               }








                                               }








 








                                               printf("Closing server...\n\n");








                                              
closesocket(ssocket);




 






                               }




                }




 






                WSACleanup();




 






                system("PAUSE");




   
           





                return 0;



}




 






 






 






 






 





bolozofvelasgo@hotmail.com

3 réponses

Messages postés
29
Date d'inscription
samedi 1 décembre 2007
Statut
Membre
Dernière intervention
11 avril 2010

salut ,  je ne pense pas que le soucis vient de ton programme puisqu'il  fonctionne en local. je ne connais pas la configuration de ton réseau mais je pense qu'elle doit être classique, c'est à dire que ton pc est connecté à un boitier adsl qui lui te donne accès au réseau internet. il faut savoir que par défaut le boitier est configuré pour empêcher toute demande de connection entrante. si tu veux accepter les demandes de connections tu dois ouvrir le ou les numeros de port concernés et les diriger vers l'adresse ip du pc qui acceptera la demande de connection. A mon avis c'est une manoeuvre que tu as dû déjà effectuer en ouvrant certains ports pour des logiciels de peer-to-peer. si toutefois  tu as des ports déjà ouverts utilise les pour tester ton programme, ça ne sert à rien d'en ouvrir d'autre.
Messages postés
4
Date d'inscription
dimanche 4 mai 2008
Statut
Membre
Dernière intervention
26 mai 2009

Merci je teste et je vouos tient au courrant :)
Messages postés
2671
Date d'inscription
vendredi 25 janvier 2002
Statut
Membre
Dernière intervention
6 février 2013
2
Salut,

Verifie aussi si tu n'as pas un firewall qui bloquerai ton programme.
Pour exemple le parefeu inclus avec windows xp autorise par défaut les conenctions sur un meme réseau, mais bloque toutes celles en direction du net.

En plus de cela il faut que tu paramètres ton routeur en prennant en compte la configutration de ton réseau.

Shell