Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1173 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Socket qui ne prend qu'un seul message...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Socket qui ne prend qu'un seul message...

n°1145887
titouille
Posté le 11-07-2005 à 00:33:49  profilanswer
 

Bonjour !!!
 
Voilà... Je tente, cf un autre message sur ce même forum, de créer un mini serveur socket en C++ (via C++BuilderX), permettant de communiquer avec une animation Flash via l'objet XMLSocket.
 
 
Bon, je me suis documenté, et j'ai fini par aboutir à un résultat, mais qui n'est de loin pas encore satisfaisant.  
Pour le moment, le truc est simple. J'aurai besoin d'envoyer 2 requêtes au serveur. 1 commande, ainsi que la demande de fermeture du serveur (donc de l'exe)
 
Je suis arrivé à faire la création du socket, la création de la connexion et la réception/envoi d'un message avec réception du résultat dans l'animation Flash, mais ça ne fonctionne qu'une seule fois...
Dès que la connexion est établie, je peux faire une requête vers le serveur, puis le renvoi d'un résultat vers l'animation Flash, puis ensuite, les requêtes ne donnent plus rien...
 
 
Voici mon code... Si vous pouviez me donner quelques informations/conseils sur la manière de m'y prendre pour pouvoir faire plusieurs interactions, sur l'implémentation de mon serveur, je vous en serai gré :) ( et également me dire si ma manière de faire pour afficher des infos dans le buffer est correcte ou si il y a mieux à faire... j'imagine une surcharge d'opérateurs, mais c'est un peu trop lointain comme concepts pour moi... une url de rafraichissement serait la bienvenue ;) )
 
D'avance merci
 
 
le code :
 

Code :
  1. #include <iostream.h>
  2. #include <winsock2.h>
  3. #pragma comment(lib, "ws2_32.lib" )
  4. #define MAXBUFLEN 100
  5. #define MYPORT 2027
  6. int main( int argc, char * argv[] )
  7.   {
  8.   WSADATA WSAData;
  9.   if (WSAStartup(MAKEWORD(2, 0), &WSAData) != 0)
  10.     {
  11.     fprintf(stderr, "WSAStartup failed.\n" );
  12.     exit(1);
  13.     }
  14.   SOCKET sock;
  15.   SOCKET csock;
  16.   SOCKADDR_IN sin;
  17.   SOCKADDR_IN csin;
  18.   int msgsize, sinsize, numbytes;
  19.   char buff[MAXBUFLEN];
  20.   sock = socket(AF_INET, SOCK_STREAM, 0);
  21.   sin.sin_addr.s_addr   = inet_addr("127.0.0.1" );
  22.   sin.sin_family   = AF_INET;
  23.   sin.sin_port    = htons(MYPORT);
  24.   memset(&(sin.sin_zero), '\0', 8);  // zero the rest of the struct
  25.   if (bind(sock, (SOCKADDR *)&sin, sizeof(sin)) == -1)
  26.     {
  27.     fprintf(stderr, "Bind failed.\n" );
  28.     exit(1);
  29.     }
  30.   if( listen(sock, 0) == -1 )
  31.     {
  32.     fprintf(stderr, "Listen on socket failed.\n" );
  33.     exit(1);
  34.     }
  35.   char* message = "Hello world, yeyeye !\r\n";
  36.   msgsize = strlen(message) + 1;
  37.   while(1)
  38.     {
  39.     sinsize = sizeof(csin);
  40.     if((csock = accept(sock, (SOCKADDR *)&csin, &sinsize)) == -1 ) //INVALID_SOCKET)
  41.       {
  42.       fprintf( stderr, "accept connection" );
  43.       continue;
  44.       }
  45.     fprintf( stderr, "server : got connection from %s\n", inet_ntoa( csin.sin_addr ) );
  46.     if( numbytes=recv( csock, buff, MAXBUFLEN - 1, 0) <= 0 )
  47.       {
  48.       if( numbytes == 0 )
  49.         // connection closed...
  50.         fprintf( stderr, "connection closed...\n" );
  51.       else
  52.         perror( "recv" );
  53.       }
  54.     fprintf( stderr, buff );
  55.     int bytes_sent = send(csock, message, msgsize, 0);
  56.     }
  57.   }


 
 
 
[edit]
encore une petite question... Est-ce que, à priori, l'exe résultant de ce code est capable de tourner sur winXP autant bien que sur win98 ou 95, ou bien devrais-je plutôt utiliser une version winsock plus ancienne pour garder une compatibilité sur les anciens OS windows ?
[/edit]


Message édité par titouille le 11-07-2005 à 00:48:51
mood
Publicité
Posté le 11-07-2005 à 00:33:49  profilanswer
 

n°1153987
Moktar1er
No one replies...
Posté le 19-07-2005 à 17:40:21  profilanswer
 

Salut, je bosse sur le même genre de trucs en ce moment, sauf que mon problème se situe sur le recv; il bloque et il ne se passe rien...
La connexion est bien établie car flash détecte la mort du serveur, mais que se soit les send ou les recv, niveau communication il ne se passe que dalle...
Tu pourrais aussi poster ton code flash que je jette un oeil sur comment tu as initialisé ton objet XMLSocket et comment tu communiques avec?


Message édité par Moktar1er le 19-07-2005 à 17:40:48
n°1154313
Moktar1er
No one replies...
Posté le 20-07-2005 à 09:28:19  profilanswer
 

Bon en fait le souci venait juste de la façon étrange dont Flash gère la portée des variables... En déclarant ma socket dans _global ça passe.

n°1156039
titouille
Posté le 21-07-2005 à 14:30:25  profilanswer
 

Mon problème était que ce n'est pas un serveur non-bloquant, avec le code que j'ai mis. Donc je ne peux pas "écouter"... il se connecte, attend une entrée, la traite et déconnecte... Il faut faire du non-bloquant, pour faire de la communication avec Flash. Enfin, c'est là ou j'en suis arrivé. Mais je n'arrive par contre pas à faire un serveur socket avec GUI en wxWidgets... je pense qu'il faut que je lance plusieurs threads pour les différents éléments de mon appli, mais je ne suis pas encore au top pour ça...


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Socket qui ne prend qu'un seul message...

 

Sujets relatifs
Afficher un message de la bddenvoie de formualire : trois clics FF contre un seul pour IE
[mailto] regler la police du messagefaire appaître un message sur une session fermée (cTRL+alt+suppr)
Pb socket niveau 2transfert d'un fichier via socket
[Perl] Timeout sur socketSocket et joie de vivre !
message d'erreurUne fonction JS pour detecter si le navigateur le prend en charge ?
Plus de sujets relatifs à : Socket qui ne prend qu'un seul message...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR