tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
3273
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    shiftycapone shiftycapone ist offline Rookie
    Registriert seit
    Apr 2004
    Beiträge
    6
    Hallo!

    Ich möchte mich mit dem IRC Protokoll auseinander setzen. Ziel von mir sind zum Beispiel einfache Kommunkation zwischen Client und Server. Jedoch habe ich keine Ahnung wo ich anfangen muss. Gegoogelt habe ich schon, aber wonach? IRC Protokoll etc, spuckt er mir zwar Dokumente aus, aber dort steht nicht wie ich so ein Protokoll ansprechen muss. Wäre dankbar wenn mir jemand auf die Sprünge helfen würde! Ach ja, das ganze soll erstmal nutr unter Konsole laufen. Ists gut, wenn man Ahnung von Socket Programmierung hat? (Hab ich nämlich)

    Danke für Eure Hilfe
    Geändert von shiftycapone (23.05.04 um 19:55 Uhr)
     

  2. #2
    Tobias Grimm Tobias Grimm ist offline Rookie
    Registriert seit
    Mar 2004
    Ort
    Hessen
    Beiträge
    9
    Ja du kannst das komplett mit Sockets realisieren, ein gutes Dokument zum Thema IRC-Protokoll findest du hier:
    http://www.cse.ohio-state.edu/cgi-bin/rfc/rfc1459.html

    Wenn du dich durch das Dokument durchgearbeitet und Grundwissen in Socket-Programmierung hast sollte das kein Problem sein.
     

  3. #3
    shiftycapone shiftycapone ist offline Rookie
    Registriert seit
    Apr 2004
    Beiträge
    6
    Danke für Deine schnelle Antwort!
    Vielleicht ne dumme Frage, aber in diesen RFC's stehen ja keine Funktionen drin, die man aufrufen muss, oder? Wie realisier ich denn einen solchen Aufruf an hand der Informationen dieses Dokuments?

    Als Beispiel nehme ich an:

    Ich möchte den WHOIS Befehl senden. Sende ich dann einfach den String "Whois"? Und werte dann die Antwort vom Server aus, oder wie hab ich das zu verstehen?
    Geändert von shiftycapone (23.05.04 um 19:58 Uhr)
     

  4. #4
    Tobias Grimm Tobias Grimm ist offline Rookie
    Registriert seit
    Mar 2004
    Ort
    Hessen
    Beiträge
    9
    Wenn du eine Client-Anwendung schreiben willst connectest du zuerst ganz normal mit einem Socket auf einen IRC-Server deiner Wahl.

    Hier steht welche Informationen der Server direkt nach der Verbindung erwartet:
    http://www.cse.ohio-state.edu/cgi-bi...html#sec-4.1.1

    Ich fasse das mal schnell zusammen. Wenn der IRC-Server passwortgeschützt ist musst du als erste Nachricht "PASS serverpasswort\n" senden.
    Danach ist die Nick-Message dran, z.B. "NICK meinnick\n".
    Darauf folgt die etwas komplexere User-Message:
    "USER deinident 8 * :dein richtiger name\n"
    Irgendwann danach schickt dir der Server eine Nachricht "PING 123456" (mit einer eindeutigen Identifikationsnummer) auf die du mit "PONG 123456" (gleiche Nummer wie beim Ping) antworten musst.
    Dann schickt dir das Quakenet z.B. automatisch die Message of the day und du bist eigentlich schon connected. Besondere Funktionen in dem Sinne gibt es da keine, das wird alles über Nachrichten geregelt die zwischen deinem Programm und dem Server verschickt werden.

    Das steht übrigens wie gesagt alles in dem Dokument, netterweise auch noch untereinander. Einfach mal durcharbeiten, ohne kommst du nicht weit fürchte ich.

    EDIT: deinen Whois-Befehl verschickt man so: "WHOIS nick\n".
    Dann sendet der Server die Informationen zurück.
    Aber wenn du erstmal eine stehende Verbindung hinbekommst ist der Rest auch nicht mehr schwer.
    Geändert von Tobias Grimm (23.05.04 um 20:10 Uhr)
     

  5. #5
    shiftycapone shiftycapone ist offline Rookie
    Registriert seit
    Apr 2004
    Beiträge
    6
    Super, habs verstanden!
    Vielen Dank!

    EDIT: Habs wohl doch ncith verstanden.. Irgendwie klappt das nicht. Ich poste mal den kritischen Codeteil:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    
    memcpy(&buf, "NICK Carsten20\n", sizeof(buf)); 
    buf[strlen(buf)] = '\0';
    printf("Nick Kommado senden >> %s\n", buf);
    send(sck, buf, strlen(buf),0);
     
    memcpy(&buf, "USER Carsten20 8 *:cdv\n", sizeof(buf));   
    buf[strlen(buf)] = '\0';   
    printf("User Kommando senden >> %s \n", buf);   
    send(sck, buf, strlen(buf),0);     
     
    result = recv(sck, buf, 256,0);   
    buf[result] = '\0';   
    printf("Server sends Ping >> %d\n", buf);     
     
    printf("Ping back: ");   
    gets(buf);   
    buf[strlen(buf)] = '\0';   
    send(sck, buf, strlen(buf), 0);      
    result = recv(sck, buf, 256 ,0);   
    buf[result] = '\0';   
    printf("Server MOTD: %s\n", buf);
    Die Verbindung zum Server steht. Aber der Rest des Codes wohl net... Was mach ich falsch?
    Geändert von shiftycapone (23.05.04 um 21:48 Uhr)
     

  6. #6
    shiftycapone shiftycapone ist offline Rookie
    Registriert seit
    Apr 2004
    Beiträge
    6
    Bitte nochmal helfen, thx....
     

  7. #7
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    Mit dem IRC-Problem selbst kann ich dir nicht helfen, aber:

    memcpy(&buf, "NICK Carsten20\n", sizeof(buf));

    KREISCH Du kopierst hier nicht nur deinen String, sondern auch noch sizeof( buf ) - strlen( "NICK Carsten20\n" ) Bytes von irgendwo. Das kann böse in die Hose gehen!
     

  8. #8
    Registriert seit
    May 2004
    Beiträge
    287
    Ersetze mal das memcpy durch strcpy. Dann musst du weder ne 0 ans Ende setzen, du brauchst keine Längenangabe (und schon gar nicht so was abenteuerliches wie sizeof(buf)) und du musst nur buf groß genug machen um den String zu fassen.
    Ach ja noch was anderes: Von der Sache die Endurion schon festgestellt hat abgesehen; du kopierst nicht in den Buffer, also nicht an die Adresse AUF DIE die Variable zeigt, sondern du kopierst an die Adresse DER VARIABLE die auf den Buffer zeigt. Soll heißen du löst damit zwangsläufig einen Zugriffsfehler aus (das geht eigentlich totsicher in die Hose). Es müsste eher irgendwie so aussehen:

    Code :
    1
    2
    3
    4
    5
    
    char buf[256];
     
    strcpy(buf, "NICK Carsten20\n"); 
    printf("Nick Kommado senden >> %s\n", buf);
    send(sck, buf, strlen(buf),0);
     

Ähnliche Themen

  1. MSN-Protokoll
    Von HoBbY im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 09.01.05, 15:36
  2. protokoll
    Von cur im Forum Photoshop
    Antworten: 3
    Letzter Beitrag: 27.02.03, 15:31
  3. protokoll
    Von Meister Eder im Forum Photoshop
    Antworten: 1
    Letzter Beitrag: 08.01.02, 16:35
  4. Was ist ein Protokoll ?
    Von iorade im Forum Sonstige Sprachen
    Antworten: 1
    Letzter Beitrag: 09.12.01, 16:54
  5. protokoll
    Von flatzy im Forum Photoshop
    Antworten: 4
    Letzter Beitrag: 29.08.01, 09:08