[C]Socket IRc

Socket IRc [C] - C - Programmation

Marsh Posté le 28-04-2005 à 16:13:53    

Bonjour j'ai fait un bot irc qui devrais ce connecter a l'irc (je sais le code n'est pas beau )mais le compilos ne veux pas lancer et je ne voie pas pourkoi il met aucun message d'erreur...
 

Code :
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <time.h>
  4. #ifdef WIN32
  5. #include <winsock.h>
  6. #else
  7. #include <stdio.h>
  8. #include <unistd.h>
  9. #include <sys/socket.h>
  10. #include <netinet/in.h>
  11. #include <netdb.h>
  12. #include <sys/types.h>
  13. #include <arpa/inet.h>
  14. #endif 
  15. #define   JOIN_CMD              "JOIN %s\n"
  16. #define   PART_CMD              "PART %s\n"
  17. #define   NICK_CMD              "NICK %s\n"
  18. #define   PRIVMSG_CMD           "PRIVMSG %s :%s\n"
  19. #define   QUIT_CMD              "QUIT %s\n"
  20. #define   USER_CMD              "USER %s %s %s :%s\n"
  21. #define   NOTICE_CMD            "NOTICE %s :%s\n"
  22. #define   TOPIC_CMD             "TOPIC %s :%s\n"
  23. #define MAXBUF 512
  24. char version[]="Smybot V.0.6b made in C by KoRn69",nick[35];
  25. char botident[]="lol",bothost[]="prout",botname[]="Test",realname[]="SmyBot V3.01",botnick[]="Smybot";
  26. fd_set master;
  27. int fdmax;
  28. int sock_irc;
  29. int log(char *yo)
  30. {
  31.  FILE *f = fopen("log.txt", "w" );
  32.     fprintf(f,"%s\n",yo);
  33. fclose(f);
  34. }
  35. void parser(char *ligne,int mon_sock){
  36. char buffer[1447];
  37.     char *cmd=NULL,*reste=NULL,*utilisateur=NULL,*dest=NULL,*guest=NULL,*host=NULL;
  38. if(*ligne == ':'){
  39.  ligne++;
  40.  if(cmd=strchr(ligne,' ')) *cmd++ = '\0';
  41.  else return;
  42.  if(dest=strchr(cmd,' ')) *dest++ ='\0';
  43.  else return;
  44.         if(reste=strchr(dest,' ')) *reste++ = '\0';
  45.         else return;
  46.  utilisateur=ligne;
  47.         if(guest=strchr(utilisateur,'!')) *guest++ = '\0';
  48.         else return;
  49.         if(host=strchr(guest,'@')) *host++ = '\0';
  50.         else return;
  51.          }else
  52.  if(utilisateur=strchr(ligne,' ')) *utilisateur++ = '\0';
  53.  else return;
  54.  if(reste=strchr(utilisateur,' ')) *reste++ = '\0';
  55.  else return;
  56.  cmd=ligne;
  57. }
  58.   }
  59. }
  60. int connection(char *server, int port){
  61. struct hostent *h;
  62. struct sockaddr_in sockname;
  63. if((sock_irc = socket(AF_INET, SOCK_STREAM,0))<0) {
  64.  return(-1);
  65. }
  66. if((h = gethostbyname(server))==NULL) {
  67.  if((h = gethostbyaddr(server, sizeof(server), AF_INET))==NULL){
  68.           return(-1);
  69.  }
  70. }
  71. memcpy(&sockname.sin_addr.s_addr, h->h_addr, h->h_length);
  72. sockname.sin_family=AF_INET;
  73. sockname.sin_port=htons(port);
  74. if(connect(sock_irc, (struct sockaddr *)&sockname, sizeof(sockname))<0) {
  75.        return(-1);
  76. }
  77. FD_SET(sock_irc, &master);
  78. if (sock_irc > fdmax) {
  79.  fdmax = sock_irc;
  80. }
  81. return sock_irc;
  82. }
  83. int join_chan(char *file,int mon_sock)
  84. {
  85.  FILE *f;
  86.     char zeus[65];
  87.     char buffer[1447];
  88.     f =fopen(file, "r" );
  89.     if(!f)
  90.     {
  91.     printf("Fichier %s inexistant; merci d'editer ce fichier et de relancer le bot",file);
  92.           return 0;
  93.      }
  94.  while(feof(f)!=1)
  95.      {
  96.    snprintf (buffer, 256,JOIN_CMD, zeus);
  97.    send (mon_sock, buffer, strlen(buffer), 0);
  98.    if (feof (f))
  99.           break;
  100.    fgets(zeus, 64, f);
  101.    printf("%s\n",zeus);
  102.    }
  103.           fclose (f);
  104.           return 0;
  105. }
  106. int main (void)
  107. {
  108. #ifdef WIN32
  109.     WSADATA Data;
  110.     WSAStartup (MAKEWORD (2, 2), &Data);
  111. #endif
  112.     char buffer[1447];
  113.     int mon_sock, taille;
  114.     while (1)
  115.     {   
  116.           if((mon_sock=connection("irc.voila.fr",6667))==-1){
  117.           printf("Le bot n'a pa pu se connecte verifiez l'host/ip et port du serveur svp.\n" );
  118.    }
  119.    else{
  120.     snprintf(buffer, 500,NICK_CMD,botnick);
  121.    send (mon_sock, buffer, strlen(buffer), 0);
  122.            snprintf(buffer, 500,USER_CMD,botident,bothost,botname,realname);
  123.    send (mon_sock, buffer, strlen(buffer), 0);
  124.    printf("Bot by KoRn69\n" );
  125.    printf("Socket %i connecte\n",mon_sock);
  126.    printf("Je vais maintenant joindre le(s) chan(s):\n" );
  127.    join_chan("chan.txt",mon_sock);
  128.    while (1)
  129.           {
  130.                 taille = recv(mon_sock, buffer, 1446, 0);
  131.                 if (taille == 0)
  132.                 break;
  133.                 buffer[taille] = 0;
  134.                 printf("%s\n",buffer);
  135.    if(!strncmp(buffer, "PING ", 5))
  136.                 {
  137.                        buffer[1]= 'O';
  138.                        send(mon_sock, buffer, strlen(buffer), 0);
  139. }
  140. parser(buffer,mon_sock);
  141. }
  142. }
  143. }
  144. getchar ();
  145. return 0;
  146. }


Merci d'avance


Message édité par KoRn69 le 28-04-2005 à 16:17:25
Reply

Marsh Posté le 28-04-2005 à 16:13:53   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed