IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau C Discussion :

[irc] créer un bot [Non suivi]


Sujet :

Réseau C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut [irc] créer un bot
    Bonjour, j'aimerais créer un bot irc, mais pour le moment je suis bloqué. Voilà ce que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #define MAXLEN 1024
    #define HOST_IP "127.0.0.1"
    #define HOST_PORT 30000
     
    int pong( const int sock, const char ping[] );
     
    int main( void ){
       WSADATA ws;
       if( WSAStartup(MAKEWORD(2,2), &ws) != 0 ){
          printf("Erreur: WSAStartup( )\n");
          system("PAUSE");
          return 0;
       }
     
       SOCKET sock;
       if( (sock=socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET ){
          printf("Erreur: socket( )\n");
          WSACleanup( );
          system("PAUSE");
          return 0;
       }
     
       SOCKADDR_IN s;
       s.sin_family      = AF_INET;
       s.sin_addr.s_addr = inet_addr(HOST_IP);
       s.sin_port        = htons(HOST_PORT);
       if( connect(sock, (SOCKADDR *)&s, sizeof(s)) == SOCKET_ERROR ){
          printf("Erreur: connect( )\n");
          WSACleanup( );
          system("PAUSE");
          return 0;
       }
     
       char requete[MAXLEN]="PASS azerty\r\nNICK Fi7\r\nUSER fi7 \"fisept.be\" \"127.0.0.1\" :Fi7\r\n";
       if( (send(sock, requete, strlen(requete), 0)) == SOCKET_ERROR ){
          printf("Erreur: send( nick,user )\n");
          closesocket(sock);
          WSACleanup( );
          return 0;
       }
     
       char buffer[MAXLEN]={0};
       if( recv(sock, buffer, sizeof(buffer)-1, 0) == SOCKET_ERROR ){
          printf("Erreur: recv( ping )\n");
          closesocket(sock);
          WSACleanup( );
          system("PAUSE");
          return 0;
       }
     
       if( pong( sock, buffer ) == 0 ){
          printf("Erreur: pong( )\n");
          closesocket(sock);
          WSACleanup( );
          system("PAUSE");
          return 0;
       }
     
       char quit[8]="QUIT :\r\n";
       if( send(sock, quit, strlen(quit), 0) == SOCKET_ERROR ){
          printf("Erreur: quit( )\n");
          closesocket(sock);
          WSACleanup( );
          system("PAUSE");
          return 0;
       }
     
       printf("Ok\n");
       closesocket(sock);
       WSACleanup( );
       system("PAUSE");
       return 0;
    }
     
    int pong( const int sock, const char ping[] ){
       int n=0, i=6;
       char buffer[16]="PONG :";
       for( i=6; i<=13; ++i )
          buffer[i]=ping[i];
       buffer[i++]='\r', buffer[i++]='\n', buffer[i]='\0';
       if( (n=send(sock, buffer, strlen(buffer), 0)) != SOCKET_ERROR )
          return n;
       else
          return 0;
    }

    Comment est ce que je dois faire pour exécuter deux taches en même temps ? Par exemple écouter les requêtes du serveur, et envoyer les miennes ?

  2. #2
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Comment est ce que je dois faire pour exécuter deux taches en même temps ?
    Soit tu utilises les threads (pthread par exemple), soit tu utilises les processus (fork et compagnie)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 59
    Points : 74
    Points
    74
    Par défaut
    Salut,

    j'ai deja fais ce genre de programme. Pour ma part, j'avais fait ca en C++, ce qui simplifiait largement la gestion des channel et serveur si tu veux etre multi serveur, mais l'equivalent est possible en C.

    Comme il t'as ete dis, le mieux est de faire des thread pour la communication serveur.
    D'ailleurs, pour ma part j'avais fais des thread pour chaque channel egalement.

    Mon thread de communication gerait les IO avec le serveur et dispatchait les messages aux differents channels. Les thread de channel gerait les messages.

    Je te conseille une hierarchie dans ce genre, pour pouvoir traiter simplement tes message.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Ok merci, je vais essayer

  5. #5
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    Citation Envoyé par Moi06
    Comment est ce que je dois faire pour exécuter deux taches en même temps ? Par exemple écouter les requêtes du serveur, et envoyer les miennes ?
    j'ai pas trop regardé le code, je l'avoue.

    mais un bot IRC idle jusqu'a recevoir un evenement qui lui feras executer une action
    j'avais commencé a développer un bot irc
    tu reçois betement ce que le serveur t'envois ...
    et tu décide quoi faire ensuite
    -tu reçois un ping, tu repond pong
    -tu reçois une commande (genre !pouet sur un chan autorisé), tu lance la fonction qui vas bien

    c'est une conception simple, mais suffisante pour avoir un bot IRC capable de couvrir 99% des besoins d'un channel
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par PRomu@ld
    Soit tu utilises les threads (pthread par exemple), soit tu utilises les processus (fork et compagnie)
    Sous Windows ?
    Pas de Wi-Fi à la maison : CPL

  7. #7
    Expert éminent
    Avatar de PRomu@ld
    Homme Profil pro
    Ingénieur de Recherche
    Inscrit en
    Avril 2005
    Messages
    4 155
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2005
    Messages : 4 155
    Points : 6 486
    Points
    6 486
    Par défaut
    Sous Windows ?
    C'est pas possible sous cygwin ?

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut
    Bonjour, j'aurais besoin d'un peu d'aide svp.

    J'ai une fonction(recv_f) qui reçoit les requêtes, je traite les données pour récupérer une séquence \r\n, puis j'aimerais créer une thread qui répondra à cette requête. Mais le problème est que je dois passer mon buffer et mon socket en paramètre, seulement je ne peux en mettre qu'un

    J'ai mis les sources ici : http://home.versatel.be/vt689059/bot/

    J'aimerais créer une thread pour chaque action possible dans la fonction getFirstWord du fichier recv.c

    Merci pour votre aide,

    a+

  9. #9
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    Citation Envoyé par Moi06
    Mais le problème est que je dois passer mon buffer et mon socket en paramètre, seulement je ne peux en mettre qu'un
    je dirais que c'est une mauvaise conception ... mais soit !

    pour passer plusieurs parametres a un thread, tu met tout tes parametres dans une structure, et tu passe son addresse a ton thread.
    click my www
    ............|___
    ...................\
    .................._|_
    ..................\ /
    ..................."

Discussions similaires

  1. Créer un bot
    Par amoiraud dans le forum IRC / mIRC
    Réponses: 2
    Dernier message: 20/08/2010, 11h00
  2. Créer un bot
    Par Drisc007 dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 29/01/2010, 13h10
  3. [Conseils] Developper Un Irc Bot
    Par PoiSon dans le forum IRC / mIRC
    Réponses: 4
    Dernier message: 11/11/2006, 15h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo