Ein interessantes Projekt hat sich vor einiger Zeit aus einer Forumsdiskussion ergeben. Die Aufgabenstellung: Synchronisation einer Loktabelle auf verschiedenen Rechner. Die Spur 1 Freunde Mannheim bauen ihre Modul-Arrangements normalerweise in großen Hallen auf. An verschiedenen Stellen stehen mit WLAN vernetzte Laptops, an denen die Adressen mitgebrachter Loks erfaßt werden. Entscheidend dabei ist, daß keine Adresse doppelt vergeben wird, da sonst die Loks "parallel" gesteuert werden, was ggf. einen Zugunfall zur Folge haben kann. Deswegen müssen Änderungen an der Tabelle sofort an allen beteiligten Stationen sichtbar werden. Das klang interessant und nicht besonders schwierig, deshalb erklärte ich mich bereit, einen Prototyp zu bauen. Dabei wollte ich ohne eine zentrale Datenbank eines Drittherstellers auskommen. Die Datenstruktur ist nun einfach genug, daß eine XML Datei zur Speicherung ausreichen sollte.
Meine erste Idee war die Verwendung von IP Multicasting. Da nur wenige Rechner im Netz sind und die Update-Rate eher gering ist war mein Gedanke, das Paketverluste fast nie vorkommen sollten. Und es stimmte, das passierte eigentlich nie. Bei mir zuhause im Ethernet. Doch ich hatte die Rechnung ohne WLAN gemacht. Hier kommt eigentlich nur jedes zweite Paket an, was ich dann in längeren Fehlersessions bemerkte. War also nichts. Daraufhin baute ich die Anwendung um, so daß IP Multicasting nur noch verwendet wird, um die anderen Rechner im Netz zu finden. Dann werden TCP/IP Direkt-Verbindungen zu allen gefundenen Rechnern aufgebaut und ich überlasse dem TCP/IP Stack die Paketübermittlung. Das war schonmal ein Fortschritt. Trotzdem gibt es im WLAN immer noch Probleme, da die Verbindung oft einfach unterbrochen wird. Das äußert sich dann in Socket Fehlern (10054, connection reset by peer), die ohne Keepalive Pakete erst auftauchen, wenn die betreffende Station wieder etwas senden will. Mehr Ärger! Aber inzwischen funktioniert alles ganz zuverlässig.
So sieht es aus, ziemlich unspektakulär. Inzwischen ist das Programm bei mehreren Modulgruppen im Einsatz. Hier geht es zum Download / Hilfeseite.