begin process at 2012 05 29 16:54:25
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

Problem De Socket [ send() ]


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problem De Socket [ send() ]

mardi 26 juillet 2005 à 02:06:29 | Problem De Socket [ send() ]

nem02004

Voila jai fait un petit programme qui se connecte à 2 serveur irc differents ( bia 2 socket en thread ).
Je voudrais que l'orsque un des deux serveur recoit une donnée, il l'envoy à l'autre serveur ( via le second socket );
Exemple:
{
Socket_1 = socket (AF_INET, SOCK_STREAM, 0);
....
Socket_2 = socket (AF_INET, SOCK_STREAM, 0);
...
}
...
{
...
taille_recu = recv (Socket_1, msg_recu, 1024, 0);
msg_recu[taille_recu] = 0;
send (Socket_2, "looOOOl", strlen ("looOOOl"), 0);
 }
Malheuresement ca ne marche Pas :/ je narrive pas a envoyer au socket_2 depuis la reception des données du socket_1

Merci de votre aide,
J'espere avori été claire
mardi 26 juillet 2005 à 10:42:53 | Re : Problem De Socket [ send() ]

cosmobob

salut,
tu as été clair, mais il manque les 3/4 du code ... la connexion de socket_2 ne doit pas etre correcte, mais la, personne ne va pouvoir t'aider si tu ne copies colles rien ...

a+

mardi 26 juillet 2005 à 11:27:33 | Re : Problem De Socket [ send() ]

nem02004

Voila la casi totalité de la source:

int main(int argc, char *argv[])
{
  WSADATA Data;
  WSAStartup (MAKEWORD (2, 2), &Data);
/*<--**-*--*/
             HANDLE hThreadd = 0;
             HANDLE hThread = 0;
             DWORD dwThreadd = 0;
             DWORD dwThread = 0;
             HANDLE hThreadServ = 0;
             DWORD dwThreadServ = 0;
  /*<--**-*--*/
  while (1) {
             hThreadServ = CreateThread(NULL, 0, connexion_tcp, "irc.fr.worldnet.net", CREATE_SUSPENDED, &dwThreadServ);
             if (hThreadServ) { ResumeThread(hThreadServ); }
                while (hThreadServ) {
                hThreadd = CreateThread(NULL, 0, connexion_tcp, "irc.voila.fr", CREATE_SUSPENDED, &dwThreadd);
                if (hThreadd) { ResumeThread(hThreadd); }
                hThread = CreateThread(NULL, 0, connexion_tcp, "irc.voila.fr", CREATE_SUSPENDED, &dwThreadd);
                if (hThread) { ResumeThread(hThread); WaitForSingleObject(hThread, INFINITE); }
                //Connexion_tcp("irc.voila.fr");
                sleep(10000);
             }
  }
  return 0;
}
**************************************************************
**************************************************************
int
connexion_tcp (char *serv)
{
  SOCKADDR_IN SinDist;
  struct hostent *host;
  int sock;
  sock = socket (AF_INET, SOCK_STREAM, 0);
  SinDist.sin_family = AF_INET;
  SinDist.sin_addr.s_addr = inet_addr (serv);
  SinDist.sin_port = htons (6667);
  if (SinDist.sin_addr.s_addr == -1)
    {
      host = gethostbyname (serv);
      memcpy ((char *) &SinDist.sin_addr.s_addr, host->h_addr, host->h_length);
    }
  if (connect (sock, (struct sockaddr *) &SinDist, sizeof (SOCKADDR_IN)) < 0)
    { 
      return -1;
    }
  Irc_Bot(sock,serv);
  return 0;
}
**************************************************************
**************************************************************
void Irc_Bot(int sock,char *serv) {
     int Bot1;
     int Bot2;
     if (!strncmp (strlwr(serv), "irc.fr.worldnet.net", 15) == 0) {
            if ((Bot1 != sock) && (Bot2 != sock)) { Bot1 = sock; }
            else { Bot2 = sock; }
                  }

    Get_New_Nick(sock,serv);
    int taille_recu;
    char msg_recu[1025];
    int taille_recue;
    char msg_recue[1025];
     char pong[50];
     char Say_Chan[1024];
     char Say_Chan_Chan[1024];
     char Say_Notice[1024];
     char Notice_Dest[1024];
     char Say_Ctcp[1024];
     char Ctcp_Dest[1024];
     char Part_Chan[1024];
     char Part_Chan_Chan[1024];
     char Join_Chan[1024];
     char Part_Quit[1024];
     char Nick_Change[30];
     char HostReg[1000];
     char RegList[1000];
     while (1) //Boucle infinie qui recoit les données
     {
       debut:;
       taille_recu = recv (sock, msg_recu, 1024, 0);
       msg_recu[taille_recu] = 0;
       if (strncmp (strlwr(serv), "irc.fr.worldnet.net", 18) == 0) { MessageBox (NULL, msg_recu,"recue",NULL); }
       if (!msg_recu) { goto debut; }
       if ((strncmp (msg_recu, ":irc.voila.fr 498", 17) == 0) || (strncmp (msg_recu, ":irc.voila.fr 433", 17) == 0) || (strncmp (msg_recu, ":irc.voila.fr 432", 17) == 0)) { Get_New_Nick(sock,serv); }
       char *Nick = parser_get_nick(msg_recu);
       char *Ident = parser_get_ident(msg_recu);
       char *Host = parser_get_host(msg_recu);
       char *Destination = parser_get_dest(msg_recu);
       char *Commande = parser_get_cmd(msg_recu);
       char *Message = parser_get_buf(msg_recu);
       char *Pong = parser_get_pong(msg_recu);
       if (strncmp (msg_recu, "PING", 4) == 0) {
          sprintf (pong, "PONG :%s\n",Pong);
          send (sock, pong, strlen (pong), 0);
       }
       if (strstr (msg_recu, ":End of /MOTD command.")) {
             send (sock, "JOIN #ALFONSE\n", strlen ("JOIN #ALFONSE\n"), 0);
       }
             if ((Commande) && (strncmp (Commande, "PRIVMSG", 7) == 0) && (strncmp (Destination, "#", 1) == 0) && (strncmp (strlwr(serv), "irc.fr.worldnet.net", 18) == 0)) {
                     if (strncmp (Message, ".say", 4) == 0) {
                        char *Say = strtok(Message, " ");
                        Say = strtok( NULL," ");
                        sprintf (Say_Chan_Chan,"%s",Say);
                        Say = strtok( NULL,"\n");
                        if (!Say) { goto debut; }
                        sprintf (Say_Chan,"PRIVMSG %s :%s\n",Say_Chan_Chan,Say);
                        send (Bot1, Say_Chan, strlen (Say_Chan), 0);
                        send (Bot2, Say_Chan, strlen (Say_Chan), 0);
/* voila les erreurs; au lieu de menvoyer les commandes sur les socket bot1 et bot2 (irc.voila.fr), il menvoi le tout sur le socket irc.fr.worldnet.net */
                     }
             }
     }
}

mardi 26 juillet 2005 à 12:09:50 | Re : Problem De Socket [ send() ]

cosmobob

"au lieu de menvoyer les commandes sur les socket bot1 et bot2 (irc.voila.fr), il menvoi le tout sur le socket irc.fr.worldnet.net"

c'est normal, les sockets Bot1 et Bot2 désignent ton socket principal ...
(cf le debut de ta procedure Irc_Bot :
{ Bot1 = sock; }  else { Bot2 = sock; })

en fait tu t'es emmelé completement les pinceaux :) (d'ailleurs pourquoi crées tu deux threads qui se connectent sur irc.voila.fr ?? si tu fais deux fois createthread, tu auras deux threads et non pas un seul)

le plus simple il me semble est de créer deux sockets qui seront des variables globales .

SOCKET sock_voila;
SOCKET sock_worldnet;

ensuite depuis ton thread worldnet, tu envoies ce que tu veux sur sock_voila.
A toi de reperer que quand le nom du serveur est voila, tu utilises sock_voila, et sinon tu utilises sock_worldnet.

sers toi egalement de noms de variables qui ont un sens plus important !!!
(ex hThreadVoila ou hThreadWorldnet au lieu de hThreadd ...)

si tu as besoin de plus d'aide ou que j'ai pas été assez clair, hésite pas
a+


  


Cette discussion est classée dans : send, serveur, problem, socket, recu


Répondre à ce message

Sujets en rapport avec ce message

Socket/send/recv [ par samuraijack1412 ] Bonjour, Je suis en train d'écrire une application de "chat". Elle se compose d'un client et d'un serveur. Maintenant, je veux que le client puisse Alternative au socket. [ par mohdaef ] Bonjours à tous,Je poste ce message car je me retrouve confronté un problème, je travaille sur un programme qui utilise les sockets pour communiquer p probléme socket du serveur. [ par jerem3000 ] Bonsoir, Actuellement je commence a apprendre la programmation réseau et j'ai un peut du mal a tous comprendre, j'ai donc commencé a analyser le fonc Thread & Socket [ par katerson ] Bonjour tout le monde! Je travaille actuellement sur un projet serveur/client sur UDP. Mon serveur comporte 3 threads qui doivent scruter (indépenda [C.] 2 Problèmes sur le serveur [ par Adict ] bonsoir tout le monde. [^^happy13] alors ça va faire vraiment longtemps que je patine sur mon serveur. J'ai cherché et cherché pour le 2ème problème Problème de connection à un serveur HTTP à partir d'un socket [ par Albanderuaz ] Bonjour à tous, J'ai un étrange problème lors d'une tentative de connexion à un serveur, disons par exemple google. La connexion fonctionne depuis ch plantage du serveur [ par Adict ] Bonjour [^^happy13] alors voila j'ai fini un projet mais il y a un problème. Il se compose d'une application client et serveur. Il y a quelque temps programmation socket serveur client c/c++ [ par beni91 ] Bonsoir, je dois coder un serveur en c sous Windows avec comme compilateur borland mais j'ai des erreur que je n'arrive pas a résoudre. J'ai fait des socket en C sous Qt [ par taifone ] je developpe une application client/serveur en C.Le client est une interface graphique en Qt et le serveur est un programme serveur.c sous linux j'ai Socket et envoi multiple [ par Disdoll ] Bonjour. Je suis en train de coder un socket sous Borland C++ builder 6. Je précise que je suis un novice en socket. Je cherche à pour envoyer deux do


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,671 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales