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

  FORUM HardWare.fr
  Programmation

  [C++] Pourquoi send() des fonctions socket ne marche qu'une seule fois

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C++] Pourquoi send() des fonctions socket ne marche qu'une seule fois

n°34866
antsite
Je me souviens
Posté le 28-05-2001 à 16:37:23  profilanswer
 

Pourquoi send() des fonctions socket ne marche qu'une seule fois de suite sans déconnecter ?

mood
Publicité
Posté le 28-05-2001 à 16:37:23  profilanswer
 

n°34885
brascoo
Posté le 28-05-2001 à 16:57:50  profilanswer
 

Tu te trompe , tu peux utiliser Send autant de fois que tu veux du moment que tu ne te deconnecte pas.
 
A mon avis ca vient de ton code...
 
si tu peux en afficher un bout...
 
Br@scoo

n°34886
MarKuSnoel
Posté le 28-05-2001 à 16:59:29  profilanswer
 

y'aurait-il pas un buffer a vider qq part ???


---------------
Vas-y, fonce! Tu sais jamais, sur un malentendu ça peut marcher...
n°34890
brascoo
Posté le 28-05-2001 à 17:01:55  profilanswer
 

normalement non, tu n'ai pas oblige de gerer de buffer en C.

n°34892
brascoo
Posté le 28-05-2001 à 17:03:11  profilanswer
 

je me corrige car j'ecrit vraiment comme c.. :
 
Normalement non, tu n'es pas obligé de gérer de buffer en C.

n°34893
brascoo
Posté le 28-05-2001 à 17:03:17  profilanswer
 

je me corrige car j'ecris vraiment comme c.. :
 
Normalement non, tu n'es pas obligé de gérer de buffer en C.

n°34899
MarKuSnoel
Posté le 28-05-2001 à 17:07:07  profilanswer
 

Mais a quoi servent les fonctions flush et fflush ???


---------------
Vas-y, fonce! Tu sais jamais, sur un malentendu ça peut marcher...
n°34925
Amadeus
Posté le 28-05-2001 à 17:52:22  profilanswer
 

Antsite ta trouve la soluce au pb sock async ?
 

ANTSite a écrit a écrit :

Pourquoi send() des fonctions socket ne marche qu'une seule fois de suite sans déconnecter ?



n°34954
XuTi
Posté le 28-05-2001 à 19:43:30  profilanswer
 

mets en ligne ton source...
parce que la je ne peux t aider...

n°35326
antsite
Je me souviens
Posté le 29-05-2001 à 17:46:36  profilanswer
 

Voici le bout de code.
WSAStartup a été appelée
 
void envoi(char pse[],char adip[],unsigned short prt)
{
 SOCKET c;
 SOCKADDR_IN to;
 BOOL sortie = FALSE;
 BOOL change = FALSE;
 
 char data[255];
 char tosend[255];
 char move[10];
 char ping[10] = "ping ";
 int n = 0;
 
 do
 {
  c = socket(AF_INET,SOCK_STREAM,0);
  if(c == INVALID_SOCKET)
  {
   printf("Unable to create socket.\n" );
   printf("Press any key to terminate." );
   getch();
   fflush(stdin);
   exit(1);
  }
  else
  {
   change = FALSE;
   n = 0;
 
   to.sin_family = AF_INET;
   to.sin_addr.s_addr = inet_addr(adip); // IP Serveur
   to.sin_port = htons(prt); // Port à utiliser
 
   if (connect(c,(LPSOCKADDR)&to,sizeof(to)) == SOCKET_ERROR)
   {
    printf("Unable to connect server.\n" );
    printf("Press any key to terminate." );
    getch();
    fflush(stdin);
    exit(1);
   }
   
   else // Y a un blem : envoi que la première fois
   { // Il faudrait déconnecter & reconnecter, mais too long on net.
    printf("Connected to %s (%d)\n\n",adip,prt);
    do
    {
     n = 0;
     printf (": " );
     gets(data);
 
     if (strcmp(data,"/end" ) == 0) //quitter
      n = 1;
     
     if (strstr(data,"/change" ) != NULL) // change serveur
      n = 2;  
     
     if (strstr(data,"/name" ) != NULL) //change pseudo (juste pour ce chat)
      n = 3;  
     
     if (strcmp(data,"/info" ) == 0)
      n = 4;
     
     if (strcmp(data,"/test" ) == 0)
      n = 5;
 
     switch(n)
     {
     case 0 : //envoyer data
      strcpy(tosend,pse);
      strcat(tosend,": " );
      strcat(tosend,data);
             
      if (send(c,tosend,sizeof(tosend),0) == SOCKET_ERROR)
       printf("->Failed\n" );
      else
       printf("->Ok\n" );
       //faire un accusé de reception avec recv() et le serveur send("->ok" );
       //->Ok serait l'accusé
      break;
 
     case 1 : //quitter
      strcpy(tosend,"Disconnection of " );
      strcat(tosend,pse);
      send(c,tosend,sizeof(tosend),0);
       
      sortie = TRUE;
      break;
 
     case 2 : //change
      if (sscanf(data,"%s %s %d",move,adip,&prt) == 3)
      {
       strcpy(tosend,"Disconnection of " );
       strcat(tosend,pse);
       strcat(tosend," toward another server." );
       send(c,tosend,sizeof(tosend),0);
       
       shutdown(c,SD_BOTH);
       closesocket(c);
       
       change = TRUE;
      }
      else
       printf("/change IP Port\n\n" );
 
      break;
 
     case 3 : //pseudo
      if (sscanf(data,"%s %s",move,pse) == 2)
       printf("Name changed : %s\n\n",pse);
      else
       printf("/name Name\n\n" );
 
      break;
       
     case 4 : //infos
      system("netstat -a" );
      break;
 
     case 5 : //test
      strcat(ping,adip);
      system(ping);
      break;
 
     default : //erreur
      printf("\nUndefined error.\n" );
      break;
     }
 
    }
    while(sortie != TRUE && change != TRUE);
   }
  }
 }
 while(sortie != TRUE);
 
 shutdown(c,SD_BOTH);
 
 if (closesocket(c) == SOCKET_ERROR)
  printf("Close error.\n" );
   
 WSACleanup();
}
 
Amadeus, j'ai pas réussi async

mood
Publicité
Posté le 29-05-2001 à 17:46:36  profilanswer
 

n°35340
Amadeus
Posté le 29-05-2001 à 18:55:12  profilanswer
 

jai fais ds le tps une fonction de sock async qui permet de se connecter a un srv, de lui envoyer un msg,... de maniere asynchrone. Je viens de la retrouver mais elle est un peu longue donc jte lenvoies par mail. a priori ca devrait resoudre ton pb.
A+

n°35373
XuTi
Posté le 29-05-2001 à 20:04:54  profilanswer
 

c normal que cela ne fonctionne pas...
ton bout de code est un bout de code d un serveur    
                to.sin_family = AF_INET;
   to.sin_addr.s_addr = inet_addr(adip); // IP Serveur
   to.sin_port = htons(prt); // Port à utiliser
 
mais pour que le serveur fonctionne, il faut que tu attaches la socket avec un bind....
et apres tu peux faire un listen, et apres tu fais un accept pour accepter le dialogue avec des clients...

n°35459
antsite
Je me souviens
Posté le 30-05-2001 à 09:32:26  profilanswer
 

Ben alors comment je donne l'ip du serveur et le port au client si c'est pas avec ce petit bout de code ?

n°35485
Amadeus
Posté le 30-05-2001 à 10:26:25  profilanswer
 

Non c bon, ton code est celui d'un client pas d'un serveur, ta donc pas besoin d'un bind et d'un listen et l'ip que tu donnes est celle du serveur distant.
 

ANTSite a écrit a écrit :

Ben alors comment je donne l'ip du serveur et le port au client si c'est pas avec ce petit bout de code ?



 

[edit]--Message édité par Amadeus--[/edit]

n°291908
AGA
La boîte à Bokeh!
Posté le 22-01-2003 à 15:42:27  profilanswer
 

:up:
 
moi le send ne marche qu'une fois

n°292038
antsite
Je me souviens
Posté le 22-01-2003 à 17:57:30  profilanswer
 

salut,
en tant qu'auteur de ce topic (j'ai presque honte lol), je te rassure que non on peut envoyer autant de fois que l'on veut, send() n'est pas limité! Malheureusement je ne me rappelle plus d'où venait l'erreur pour pouvoir t'aider, dsl.
Pense à bien vider le tampon de réception que tu utilises avec recv, etc,...

n°292055
Harkonnen
Modérateur
Un modo pour les bannir tous
Posté le 22-01-2003 à 18:08:42  profilanswer
 

brascoo a corrigé 3 fois cette phrase :


Normalement non, tu n'es pas obligé de gérer de buffer en C.


 
Tu peux aussi éditer le message tu sais... :sarcastic:


---------------
J'ai un string dans l'array (Paris Hilton)

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

  [C++] Pourquoi send() des fonctions socket ne marche qu'une seule fois

 

Sujets relatifs
peut on appeler des fonctions javasript dans un evenmt dans netscape 4code html qui marche pas mais voit pas pourquoi
Socket C++ -> WSAAsyncSelect()Socket C++
[ALGO] Comment marche une fonction random() ?[Under] En fait ton script pour les bulles d'aides ne marche pas !
Testez mon programme utilitaire ! il marche c'est garanti ![PHP] easy php et win me = ca marche?
Php serveur SSL (Ca marche mais le cadenas ne s'affiche pas)BDE ne marche pas! j'attend vos idées !
Plus de sujets relatifs à : [C++] Pourquoi send() des fonctions socket ne marche qu'une seule fois


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