IRC-Dokumentation · Experten
Das Format einer IRC-Nachricht lesen und analysieren
Eine IRC-Nachricht endet mit CRLF. Sie kann Tags, Quelle, Befehl und Parameter enthalten. Über TCP empfangene Daten sind nicht notwendigerweise eine vollständige Zeile. Nachrichten müssen deshalb zuerst abgegrenzt und danach interpretiert werden.
Dialova-Team · Überprüft am
Eine Zeile zerlegen #
@time=2026-10-29T10:00:00.000Z :Alice!alice@cloak.example PRIVMSG #atelier :Bonjour tout le monde| Bereich | Wert im Beispiel | Aufgabe |
|---|---|---|
| Tags | @time=… | Metadaten vor dem ersten trennenden Leerzeichen. |
| Quelle / Präfix | :Alice!alice@cloak.example | Vom Server angegebener Absender. |
| Befehl | PRIVMSG | Protokollaktion. |
| Zielparameter | #atelier | Ziel. |
| Letzter Parameter | :Bonjour tout le monde | Ein Parameter mit Leerzeichen. Der Doppelpunkt gehört nicht zum Inhalt. |
Leerzeichen und letzter Parameter #
Das grundlegende Trennzeichen ist das ASCII-Leerzeichen. Ein Doppelpunkt kann den letzten Parameter einleiten. Danach gehört alles zu diesem Parameter, einschließlich der Leerzeichen. Die gesamte Zeile einfach an Leerzeichen zu trennen würde diese Information verlieren.
TOPIC #atelier :
PRIVMSG Bob :texte avec des espaces
PING :jeton-123Im ersten Beispiel ist der letzte Parameter leer. Im zweiten enthält er Text mit Leerzeichen. Die C-/S-Kennzeichnungen der übrigen Beispiele gehören nie zu den tatsächlich übertragenen Bytes.
Länge, Bytes und Kodierung #
Die historische Längengrenze einer IRC-Nachricht beträgt 512 Bytes einschließlich CRLF. Das sind nicht 512 Zeichen: Ein UTF-8-Zeichen kann mehrere Bytes benötigen. Für IRCv3-Tags gelten zusätzliche eigene Grenzen, die den übrigen Nachrichtenteil nicht beliebig lang machen.
Historisches IRC garantiert keine einheitliche Textkodierung. Moderne Clients und Netzwerke verwenden häufig UTF-8; IRCv3-Tag-Werte müssen in UTF-8 vorliegen. Prüfe die Netzwerkrichtlinien und den Umgang mit ungültigen Eingaben. Setze keine automatische Aushandlung der Kodierung voraus.
Ein robuster Parser #
- Bytes bis zu einem vollständigen Zeilenabschluss sammeln und den Rest aufbewahren.
- Mehrere Zeilen pro Netzwerk-Lesevorgang und über mehrere Lesevorgänge verteilte Zeilen verarbeiten.
- Den Speicherbedarf begrenzen, bevor unbegrenzt auf ein Zeilenende gewartet wird.
- Zuerst Tags abtrennen und dekodieren, danach Quelle, Befehl und Parameter verarbeiten.
- Historische Ereignisse nicht als Änderung des aktuellen Zustands ausführen.
Quellen und Überprüfung
Die Beispiele verwenden erfundene Nicknames und Domains. Ausgenommen sind ausdrücklich dokumentierte Verbindungsadressen. Netzwerkspezifische Erweiterungen und Einstellungen werden im Text gekennzeichnet.
- Modern IRC — spécification du protocole client ↗Quelle Spezifikation · abgerufen am 2026-10-29
- RFC 2812 — Client Protocol (2000) ↗Quelle historisch · abgerufen am 2026-10-29
- IRCv3 — Message Tags ↗Quelle Spezifikation · abgerufen am 2026-10-29