[C] IRC Quakenet Kommunikation

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • [C] IRC Quakenet Kommunikation

      Hallo zusammen,
      ich habe mich in letzter Zeit ein wenig mit Sockets in C auseinandergesetzt und bin nun bei einem eigenen Projekt auf 2 kleinere Hindernisse gestoßen. Zum einen habe ich einen fork() Aufruf, dessen Problematik ich aber selbst erkannt habe...
      Zum Anderen habe ich eine sehr eigenwillige Kommunikation mit den IRC Servern.
      Erstmal zum Programm:
      Die relevanten Funktionen:

      C-Quellcode

      1. #include <string.h>
      2. #include <stdio.h>
      3. #include <stdlib.h>
      4. #include <sys/socket.h>
      5. #include <unistd.h>
      6. #include <arpa/inet.h>
      7. #include "client.h"
      8. #define BUFSIZE 65000
      9. #ifndef _COMMUNICATOR_C_INCLUDED
      10. #define _COMMUNICATOR_C_INCLUDED
      11. int sock;
      12. char buf[BUFSIZE];
      13. char *getmessage(void);
      14. void putmessage(char *s);
      15. void init(char *s[]);
      16. void end(void);
      17. void init(char *s[])
      18. {
      19. struct sockaddr_in server;
      20. printf("%s : connect . . .\n",s[0]);
      21. server.sin_family = AF_INET;
      22. inet_pton(AF_INET,s[1],&server.sin_addr.s_addr);
      23. server.sin_port = htons(atoi(s[2]));
      24. if((sock = socket(AF_INET,SOCK_STREAM,0))!= 0)
      25. printf("%s : socket succesfully initialized.\n",s[0]);
      26. if(connect(sock,(struct sockaddr *)&server,sizeof(server))==0)
      27. printf("%s : succesfully connected.\n",s[0]);
      28. }
      29. void end()
      30. {
      31. close(sock);
      32. }
      33. void putmessage(char *s)
      34. {
      35. write(sock,s,sizeof(s));
      36. }
      37. char *getmessage(void)
      38. {
      39. int i,t = 0;
      40. char *p1,*p2;
      41. p1 = malloc(sizeof(*p1));
      42. *p1 = '\0';
      43. p2 = malloc(sizeof(*p2));
      44. *p2 = '\0';
      45. do
      46. {
      47. i = read(sock,buf,BUFSIZE-1);
      48. buf[i] = '\0';
      49. t += i+1;
      50. p2 = malloc(t);
      51. strcpy(p2,p1);
      52. strcat(p2,buf);
      53. free(p1);
      54. p1 = p2;
      55. }while(i == BUFSIZE-1);
      56. return p1;
      57. }
      58. #endif
      Alles anzeigen

      Ich denke die Funktionen sind zum Großteil selbsterklärend, bei Fragen kommen gerne nähereErklärungen hinterher.
      Und zum eigentlichen Programm:

      C-Quellcode

      1. #include <stdio.h>
      2. #include <stdlib.h>
      3. #include <string.h>
      4. #include "client.h"
      5. #include "unistd.h"
      6. int main(int argc,char *argv[])
      7. {
      8. char input[100];
      9. int pid;
      10. init(argv);
      11. pid = fork();
      12. if(pid == 0)
      13. {
      14. while(1)
      15. printf("%s",getmessage());
      16. }
      17. else
      18. {
      19. do
      20. {
      21. scanf("%s",input);
      22. putmessage(strcat(input,"\r\n"));
      23. }while(strcmp(input,"quit"));
      24. }
      25. end();
      26. return 0;
      27. }
      Alles anzeigen

      Hier ist einmal das Problem mit dem fork()ing, weil ich halt den Child Prozess nicht abschieße und der mir dann mein Ubuntu irgendwie kleinkriegt.
      Auf der anderen Seite ist die eigentliche Kommunikation mit den IRC Servern ein Problem, weil die Befehle, die ich versende (PASS, USER, NICK) zwar als solche erkannt werden, da die resultierenden Fehlermeldungen vom Server sich darauf beziehen, jedoch besagen, dass die übergebenen Parameter nicht erkannt werden, da immer die Meldung missing parameters zurück kommt.
      Ich vermute also, dass etwas nicht mit meiner Übertragung falsch läuft, dass irgendwas anders encoded wird oder irgendwie die übertragung zerstückelt wird. Also bei Anregungen meldet euch einfach, ich versuche erstmal das Problem mit dem fork()ing zu lösen, was aber hoffentlich nur was kleines wird.
      Mit besten Grüßen,
      Christoph
      [17:57:06] <Cave_Man> wie mache ich buletten?
      [...]
      [17:58:35] <Warbringer> Der Höhlemensch auf kulinarischer Entdeckungsreise: "Wie mache ich Bouletten?"