Socket sur WAN

galmone Messages postés 4 Date d'inscription dimanche 4 mai 2008 Statut Membre Dernière intervention 26 mai 2009 - 21 mars 2009 à 19:42
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013 - 23 mars 2009 à 13:21
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

cs_goodboy21 Messages postés 29 Date d'inscription samedi 1 décembre 2007 Statut Membre Dernière intervention 11 avril 2010
21 mars 2009 à 20:33
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.
0
galmone Messages postés 4 Date d'inscription dimanche 4 mai 2008 Statut Membre Dernière intervention 26 mai 2009
23 mars 2009 à 08:48
Merci je teste et je vouos tient au courrant :)
0
DeAtHCrAsH Messages postés 2670 Date d'inscription vendredi 25 janvier 2002 Statut Membre Dernière intervention 6 février 2013
23 mars 2009 à 13:21
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
0
Rejoignez-nous