Socket qui ne s'envois pas

Tirane Messages postés 7 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 5 octobre 2003 - 4 oct. 2003 à 20:07
Phydoria Messages postés 1 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 10 novembre 2004 - 10 nov. 2004 à 21:39
Bonjour,

J'essaye de créer une connection irc mais j'ai un probleme de socket, une de mes socket ne s'envois pas (celle du PONG)

Merci de m'aider :)

connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // fin initialisation
char ok[]="NICK Spy\r\nUSER a a a :aaa\r\nNICK Spyrow\r\n";
send(sock, ok, sizeof(ok), 0);
while (1) // Boucle infinie
{
if ((rec = recv (sock, bufferRecv, 64*sizeof(char), 0)) != SOCKET_ERROR) // Réception de données
{
bufferRecv[rec] = '\0';
printf("%s",bufferRecv);
if((tmpr = strstr(bufferRecv,"PING")) != NULL)
{
printf("Demande de pong\n");
tmpr[1]='O'; // On remplace de I de PING par un O pour faire PONG (manière simple de repondre sens se casser les couilles ^^
printf("%s\n",tmpr); // Debug (Inutile)
send(sock,tmpr,strlen(tmpr),0); // Envoi de la car 'tmpr' (PONG :numero)
}
}
}
}

11 réponses

Tirane Messages postés 7 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 5 octobre 2003
4 oct. 2003 à 20:07
connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // fin initialisation 
      char ok[]="NICK Spy\r\nUSER a a a :aaa\r\nNICK Spyrow\r\n"; 
      send(sock, ok, sizeof(ok), 0);       
while (1) // Boucle infinie 
{ 
if ((rec = recv (sock, bufferRecv, 64*sizeof(char), 0)) != SOCKET_ERROR) // Réception de données 
                { 
                 bufferRecv[rec] = '\0'; 
                 printf("%s",bufferRecv); 
             if((tmpr = strstr(bufferRecv,"PING")) != NULL) 
             { 
                printf("Demande de pong\n"); 
 tmpr[1]='O'; // On remplace de I de PING par un O pour faire PONG (manière simple de repondre sens se casser les couilles ^^ 
                     printf("%s\n",tmpr); // Debug (Inutile) 
                send(sock,tmpr,strlen(tmpr),0); // Envoi de la car 'tmpr' (PONG :numero) 
             } 
                } 
        } 
}
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
4 oct. 2003 à 22:19
Salut,
Place des WSAGetLastError() un peu partout pour "localiser" l'endroit et le type de l'erreur.
0
Tirane Messages postés 7 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 5 octobre 2003
4 oct. 2003 à 23:11
J'ai un peu localiser lerreur

La socket de PONG ne s'envois pas mais je sais toujours pas pourquoi merci de m'eclairer
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
4 oct. 2003 à 23:14
Oui ca j'avais compris.
Met un WSAGetLastError() apres le send et affiche le numero de l'erreur qu'il retourne.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Tirane Messages postés 7 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 5 octobre 2003
4 oct. 2003 à 23:39
Aucun numéro bon je met toute ma source car sa fait 1 jour jy suis dessus jen ai plus qu'assez :

Merci du conseil
#include "winsock2.h" // Nécésaire pour les socks 
#pragma comment(lib, "ws2_32.lib") // idem 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <windows.h> 
#include  

char *bufferRecv = new char[800]; // Buffer des données recu 
char *bufferSend = new char[800]; // Buffer des données envoyée 
char *tmpr; 
int rec; 
#define IP   "213.161.197.78" // IP server IRC (ici irc.jeuxvideo.com) une host ne marchera pas, seul une IP marche. 
#define PORT 6667 // Port 
#define CHAN "JOIN #test" 
main() // Initialisation du socket 
{        
        WSADATA WSAData; 
        WSAStartup(MAKEWORD(2,0), &WSAData); 
    
        SOCKET sock; 
        SOCKADDR_IN sin; 

        sock = socket(AF_INET, SOCK_STREAM, 0); 

        sin.sin_addr.s_addr = inet_addr(IP); 
        sin.sin_family  = AF_INET; 
        sin.sin_port    = htons(PORT); 

        connect(sock, (SOCKADDR *)&sin, sizeof(sin)); // fin initialisation 
      char ok[]="NICK Spy\r\nUSER a a a :aaa\r\nNICK Spyrow\r\n"; 
      send(sock, ok, sizeof(ok), 0);
while (1) // Boucle infinie 
{ 
if ((rec = recv (sock, bufferRecv, 64*sizeof(char), 0)) != SOCKET_ERROR) // Réception de données 
                { 
                 bufferRecv[rec] = '\0'; 
                 printf("%s",bufferRecv); 
             if((tmpr = strstr(bufferRecv,"PING")) != NULL) 
             { 
                printf("Demande de pong\n"); 
tmpr[1]='O'; // On remplace de I de PING par un O pour faire PONG (manière simple de repondre sens se casser les couilles ^^ 
                 // Envoi de la car 'tmpr' (PONG :numero) 
printf("%s\n",tmpr); // Debug (Inutile)
send(sock,tmpr,strlen(tmpr),0);
 }
} 
        } 
}
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
4 oct. 2003 à 23:50
Salut,
S'il retourne 0, c'est que l'erreur est autre part.
J'ai compilé ton truc, et je vois pas d'erreur sur le send.
C'est juste que le serveur ne renvoie rien en reponse a ton "pong".
0
Tirane Messages postés 7 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 5 octobre 2003
5 oct. 2003 à 00:15
C'est plutot que mon programme envois pas la derniere socket (le pong)

J'ai fait un socklisten en mirc script
Il me renvois ceci :
NICK Spy
USER a a a :aaa
NICK Spyrow

Il ne renvois donc pas la derniere socket.
C'est tout a fait imcompréhensible

Merci aux gens qui m'aide :)
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
5 oct. 2003 à 00:30
Salut,
chez moi send() retourne 14(donc 14octets envoyés) et WSAGetLastError() 0, donc pas d'erreur.
0
Tirane Messages postés 7 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 5 octobre 2003
5 oct. 2003 à 01:01
Oui c'est donc bizarre que mon bot se connecte pas ... :'(
0
cs_Apokaliptik Messages postés 1 Date d'inscription mercredi 5 février 2003 Statut Membre Dernière intervention 24 octobre 2003
24 oct. 2003 à 12:36
Lorsque le serv t'envoi un PING c'est sous la forme "PING :server"
Répond lui sous la forme "PONG :server"
Moi c ske je fait et sa marche correctement.
Le probleme c'est qu'il faut isolé server.
A vous de trouvé comment
0
Phydoria Messages postés 1 Date d'inscription mercredi 10 novembre 2004 Statut Membre Dernière intervention 10 novembre 2004
10 nov. 2004 à 21:39
Lors de la conection, le serv va envoyer un "PING une_chaine", il faut renvoyer cette chaine : "PONG la_chaine", aprés le serv envoie des ping de la forme "PING :serveur" mais seulement qd la chaine a été envoyé, en fait c'est une sorte de 1iere identification, un ti schéma pr ceux qui ont pas comprit :

->Connection
"PING 25C569A3" //ping du serv
"PONG 25C569A3" //on répond au serv

->Connection établie

"PING :totoserv.net" //ping du serv
"PONG :totoserv.net" //on répond
...........

si ya une déco, on retourne a "->Connection"
0
Rejoignez-nous