
Nachdem ich die Kernfunktionen von Willow CMS fertiggestellt hatte, dachte ich darüber nach, ein zweites Nebenprojekt zu starten. Ich bastelte an meinem Mac SE herum und fragte mich, wie es wohl wäre, darauf Software zu schreiben. Es ist etwa 25 Jahre her, dass ich CodeWarror auf einem Power Macintosh 7500 zum letzten Mal gestartet und mit C/C++ herumgebastelt habe, und etwa 20 Jahre, seit ich es das letzte Mal an der Universität studiert habe. Nachdem ich die großartige Arbeit von Joshua Stein mit C auf System 6 entdeckt hatte, beschloss ich, mich daran zu wagen und eine Peer-to-Peer-Chat-Anwendung zu schreiben. Ich werde sie zunächst auf Ubuntu, dann auf dem modernen macOS und hoffentlich in nicht allzu ferner Zukunft auf System 6, 7, 8 und 9 zum Laufen bringen.
Warum
Dieses Projekt wird mir natürlich die Socket-Programmierung in C sowie die TCP- und UDP-Kommunikation über das Netzwerk näherbringen, an die ich mich vage erinnere und sogar einige Notizbücher aus meiner Uni-Zeit habe. Außerdem lerne ich, wie man strukturierte Daten über das Netzwerk zwischen Clients sendet, und kann mich darauf konzentrieren, wie das über verschiedene Architekturen hinweg funktioniert. Vor allem könnte es mir eine Möglichkeit bieten, Dateien zwischen meinen Mac SE/PowerMac G4/macOS-Systemen zu übertragen, ohne Apple Talk usw. einrichten zu müssen – theoretisch könnte ich einen modernen Mac und den Mac SE viel einfacher miteinander kommunizieren lassen. Ich bezweifle, dass ich eine moderne SSL-Verschlüsselung zwischen allen Clients zum Laufen bringen könnte, aber mal sehen.
Der Code für dieses Projekt ist jedenfalls auf GitHub und ich habe es vorerst CSend genannt . Da es letztendlich auf einem Mac SE und modernen Computern laufen soll, wäre vielleicht ein Name im Stil von „Zurück in die Zukunft“ angebracht. Vielleicht JiggaWhatsApp?
Ich bin derzeit bei Version 0.0.3 und habe meine bisherigen Bemühungen von einem anfänglich einfachen Client-Server-Setup bis hin zu einer terminalbasierten Lösung mit Unterstützung für automatische Erkennung und Messaging erweitert . Ich nehme mir Zeit, den Code bei jeder Iteration zu überprüfen, meine beiden alten Bücher zu studieren und Claude 3.7 zu verwenden, um wieder in die Materie einzusteigen.
Hier sind einige Informationen darüber, was v0.0.3 derzeit bietet (und was nicht)
Kernfunktionalität
- Peer-to-Peer-Messaging ohne zentralen Server
- Automatische Erkennung von Peers im lokalen Netzwerk
- Direktnachrichten zwischen Kollegen
- Senden Sie Nachrichten an alle bekannten Peers
Netzwerkfunktionen
- TCP für zuverlässige Nachrichtenübermittlung (Port 8080)
- UDP für Peer-Discovery-Broadcasts (Port 8081)
- Automatische IP-Erkennung für lokale Netzwerkschnittstellen
- Peer-Timeout-Verwaltung (30 Sekunden)
Benutzeroberfläche
Kommandozeilen-Schnittstelle mit einfachen Befehlen:
- /list - Aktive Peers anzeigen
- /send
- Direktnachricht senden - /übertragen
/übertragen - /quit – Anwendung ordnungsgemäß beenden
Nachrichtenprotokoll
Textbasiertes Nachrichtenprotokoll mit dem Format: TYP|ABSENDER|INHALT
Nachrichtentypen:
- DISCOVERY - Senden, um Gleichgesinnte zu finden
- DISCOVERY_RESPONSEDISCOVERY_RESPONSE
- TEXT – Normale Textnachrichten
- QUIT - Benachrichtigung beim Verlassen des Netzwerks
Technische Umsetzung
- Multithread-Architektur:
- Listener-Thread für eingehende Nachrichten
- Discovery-Thread zur Peer-Erkennung
- Benutzereingabe-Thread zur Befehlsverarbeitung
- Threadsichere Peer-Verwaltung durch Mutexe
- Signalverarbeitung für eine ordnungsgemäße Beendigung
- Timeout-Behandlung für Netzwerkvorgänge
Sicherheit und Einschränkungen
- Grundlegende Benutzernamenidentifizierung
- Keine Verschlüsselung von Nachrichten
- Kein Authentifizierungsmechanismus
- Standardmäßig auf das lokale Netzwerk beschränkt
- Maximal 10 gleichzeitige Peers