Question sur les sockets

Question sur les sockets - C - Programmation

Marsh Posté le 08-05-2006 à 01:50:58    

Bonsoir,
 
Dans cet extrait de code, lors d'un bind(), je ne saisis pas l'intérêt d'initialiser le socket csock = INVALID_SOCKET  :??:  
Aurait-on pu mettre une autre valeur? Est-elle obligatoire?
 

Code :
  1. SOCKET csock = INVALID_SOCKET;
  2. int a = sizeof(sin);
  3. bind(sock, (SOCKADDR *)&sin,sizeof(sin));
  4. listen(sock, 1);
  5. while(csock == INVALID_SOCKET)
  6. {
  7.  csock = accept(sock,(SOCKADDR*)&sin,&a) ;
  8. }
  9. printf("Connexion etablie\n" ) ;


 
Merci pour vos lumières  :jap:

Reply

Marsh Posté le 08-05-2006 à 01:50:58   

Reply

Marsh Posté le 08-05-2006 à 02:08:13    

non, c'est juste une façon tordue d'écrire
 
while ((csock = accept(...)) == -1) { /* NOP */ }
 
je pense

Reply

Marsh Posté le 08-05-2006 à 23:12:15    

Merci :)
 
Sinon j'ai un petit souci, je n'arrive pas à établir de connexion entre mon serveur et mon client, pourtant je n'ai pas l'impression d'avoir oublié quelque chose...
 
Si vous auriez une idée...
 
Le code serveur:

Code :
  1. WSADATA WSAData; // Structure WSADATA definie dans Winsock
  2. int err; // Variable renvoyee par la fonction WSAStartup lors de l'initialisation de Winsock
  3. SOCKET sock; // Declaration de la variable sock de type SOCKET  
  4. SOCKADDR_IN sin; // Structure SOCKADDR_IN qui contient les informations techniques du socket
  5. SOCKET csock ; // Declaration de la variable csock de type SOCKET  
  6. int a = sizeof(sin); // Entier contenant la taille de la structure sin
  7. int main ( void )
  8.     {
  9.     printf("Attente de la connexion cliente...\n" );
  10. /***** Initialisation de Winsock *****/
  11.        err = WSAStartup(MAKEWORD(2,2),&WSAData); // Initialisation  
  12.        if (err!=0) { // Test sur la variable renvoyee par la fonction WSAStartup
  13.           printf("Initialisation de Winsock impossible, code erreur : %d\n",err,WSAGetLastError());
  14.    }
  15. /***** Creation du socket et etablissement de la connexion *****/
  16. sock = socket(AF_INET, SOCK_STREAM, 0); // Creation du socket
  17. if (sock == INVALID_SOCKET){ // Test initialisation du socket
  18.         printf("Creation du socket impossible, erreur : %d\n",WSAGetLastError()); // Affichage du code erreur
  19. }
  20. sin.sin_addr.s_addr = htonl (INADDR_ANY); // Adresse IP du client
  21. sin.sin_family = AF_INET; // Protocole IP
  22. sin.sin_port = htons(4444); // Port du serveur
  23. bind(sock, (SOCKADDR *)&sin,a); // Liaison d'une @ à un port
  24. listen(sock, 1); // Creation d'une file d'attente
  25. csock = accept(sock,(SOCKADDR*)&sin,&a) ; // Création d'un nouveau socket réservé au client
  26. printf("Connexion etablie\n" ) ;


La code client:
 

Code :
  1. WSADATA WSAData; // Initialisation de Winsock - Structure WSADATA definie dans Winsock
  2. int err;
  3. SOCKET sock; // Creation du socket - Declaration de la variable sock de type SOCKET
  4. SOCKADDR_IN sin;
  5. int main ( void )
  6.     {
  7.  
  8. /***** Initialisation de Winsock *****/
  9.        err = WSAStartup(MAKEWORD(2,2),&WSAData); // Version 2 de Winsock  
  10.        if (err!=0) { // Test sur la variable renvoyee par la fonction WSAStartup
  11.           printf("Initialisation de Winsock impossible, code erreur : %d\n",err,WSAGetLastError()); // Affichage du code erreur
  12.                    }
  13. /***** Creation du socket et etablissement de la connexion *****/
  14. sock = socket(AF_INET, SOCK_STREAM, 0);
  15. if (sock == INVALID_SOCKET){ // Test initialisation du socket
  16.         printf("Creation du socket impossible, erreur : %d\n",WSAGetLastError()); // Affichage du code erreur
  17.                          }
  18. sin.sin_addr.s_addr = inet_addr("192.168.1.1" ); // Adresse IP du serveur
  19. sin.sin_family = AF_INET; // Protocole IP
  20. sin.sin_port = htons(4444); // Port sur lequel se connecter au serveur
  21. connect(sock, (SOCKADDR *) & sin, sizeof(sin)); // Connexion au serveur
  22.         if (sock == SOCKET_ERROR) { // Test de la connexion au serveur
  23.         printf("Erreur lors de la connexion : %d\n",WSAGetLastError());  // Affichage du code erreur
  24.                               }


 
Lorsque je définis l'adresse IP du serveur en local (127.0.0.1) ça fonctionne bien mais lorsque je teste vraiment à distance. J'ai l'impression que le serveur est en attente de connexion...  :(

Reply

Marsh Posté le 08-05-2006 à 23:26:00    

t'as bien verifie que le port 4444 est accessible sur le pc ou tourne ton programme serveur?


---------------
Mon feedback
Reply

Marsh Posté le 08-05-2006 à 23:27:36    

hmm ben j'ai rien entre mes deux machines et j'ai pas de routage non plus...

Reply

Marsh Posté le 08-05-2006 à 23:36:24    

debugage printf :o  
Tu mets des printf tour a tour dans chacune de tes fonctions et tu vois la ou ca bloque vraiment (a moins que tu le saches deja [:dawa])
edit: j'suis un peu con tiens, t'en a dja partout des printf.Auquel il bloque?il reste a "en attente de connexion" c'est ca?

Message cité 1 fois
Message édité par gocho le 08-05-2006 à 23:37:41

---------------
Mon feedback
Reply

Marsh Posté le 08-05-2006 à 23:44:39    

gocho a écrit :

debugage printf :o  
Tu mets des printf tour a tour dans chacune de tes fonctions et tu vois la ou ca bloque vraiment (a moins que tu le saches deja [:dawa])
edit: j'suis un peu con tiens, t'en a dja partout des printf.Auquel il bloque?il reste a "en attente de connexion" c'est ca?


 
Vi...  :cry:
Je commence à désespérer. J'ai fait l'erreur d'avoir fait tous mes tests en local, pensant que ça marcherait en réseau, mais au final... même pas de connexion...


Message édité par lynxia le 08-05-2006 à 23:48:19
Reply

Marsh Posté le 08-05-2006 à 23:51:13    

et le client bloque a quel message?


---------------
Mon feedback
Reply

Marsh Posté le 09-05-2006 à 00:02:55    

gocho a écrit :

et le client bloque a quel message?


 
...
 
Ca marche...  :sweat:  
 
Je suis dans un état hybride entre une immense joie et une profonde incompréhension...  
Je viens de retester pour pouvoir te répondre et ça a marché...  
On va mettre ça sur le compte de la fatigue, faut dire que je bosse depuis 15h  :(

Reply

Marsh Posté le 09-05-2006 à 00:11:05    

En tout cas merci et désolée Gocho :(
J'ai dû m'emmêler durant la compilation avec les 36000 versions de mon pgm... ^^

Reply

Marsh Posté le 09-05-2006 à 00:11:05   

Reply

Marsh Posté le 10-05-2006 à 01:18:17    

[:jar jar]  
pas d'soucis ca arrive  [:dawa]  
Par contre sauvegarde bien cette version dans un coin histoire de pas retourner en arriere, ca m'est deja arrive en faisant un truc client/serv en C et j'ai trouve ca vraiment desagreable. [:dawao]  
Sinon hesites pas si t'as d'autres questions.
ps : j'ai reussi a remettre la main sur mon topic ou j'avais fait un truc comme toi mais sous linux.
Ca pourra p'tet t'aider, on sait jamais.  [:dawa]
 
 
edit : p'tin c'est dur le soir...:o J'l'ai retrouve mais en donnant le lien ca l'fra mieux :o
le voila donc [:dawa]

Message cité 1 fois
Message édité par gocho le 10-05-2006 à 01:19:58

---------------
Mon feedback
Reply

Marsh Posté le 10-05-2006 à 05:12:36    

gocho a écrit :

[:jar jar]  
pas d'soucis ca arrive  [:dawa]  
Par contre sauvegarde bien cette version dans un coin histoire de pas retourner en arriere, ca m'est deja arrive en faisant un truc client/serv en C et j'ai trouve ca vraiment desagreable. [:dawao]  
Sinon hesites pas si t'as d'autres questions.
ps : j'ai reussi a remettre la main sur mon topic ou j'avais fait un truc comme toi mais sous linux.
Ca pourra p'tet t'aider, on sait jamais.  [:dawa]
 
 
edit : p'tin c'est dur le soir...:o J'l'ai retrouve mais en donnant le lien ca l'fra mieux :o
le voila donc [:dawa]


 
Vivi t'inquiète pas, je l'ai sauvegardé dans un endroit bien au chaud en purgeant les versions antérieures ^^
 
Et merci pour le lien :)  
Par contre... ton pgm était un "mastodonte" comparé au mien ^^;
 
Allez zou dodo moi...  ;)  (Même si je me lève dans deux heures, mais bon c'est mieux que rien)

Reply

Marsh Posté le 10-05-2006 à 20:52:03    

lynxia a écrit :


 
Et merci pour le lien :)  


 
de rien  [:romf]  

lynxia a écrit :


Par contre... ton pgm était un "mastodonte" comparé au mien ^^;


enfin c'etait un projet, on etait 3 dessus (enfin ce code, c'etait ma partie  [:god] ) et j'ai rajoute quelques petits trucs par ci par la apres.
Et c'est le resultat de plusieurs mois de travail a "galerer comme un malade " [:jar jar]  
Tu peux arriver au meme resultat sans problemes (je n'etais ni ne suis particulierement expert en C  [:dawao] )
 

lynxia a écrit :


Allez zou dodo moi...  ;)  (Même si je me lève dans deux heures, mais bon c'est mieux que rien)


 
 [:catharsis] caymal!!!
 


---------------
Mon feedback
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed