Müsste ich den Handler alle 2 Sekunden "refreshen"?
oder bin ich da auf dem falschen Weg?
Das liegt nicht an dem Handler, sondern generall an deiner Architektur.
Zum Server:
Der Server ist (normalerweis) ein Programm das ohne Unterbrechnung läuft. Bei dir wird alle einmal im Konstruktor abgehandel und wieder beendet.
Zu erst solltest du den Server ebenfalls in einem Thread lauf lassen, da ab Android 3.0(?) eine Exception geworfen wird. Das liegt daran das gewisse Methoden den aktuellen Thread, den Ui-Thread, blockieren und die somit die grafische Oberfläche "hängt".
In der run-Methode erstellst du mittels einer while-Schleife und einer geeigneten Abrruchbedingung (Interrupt oder ähnliches) den eigentlichen Server-Code - das warten auf einen Client, Erstellung der Streams usw. (Im Konstruktor alles initialisieren und vorbereiten was du brauchst, damit der Server seine Arbeit verrichten kann. Darunter fällt auch dein Timer, der ja schon Teil des Servers sein sollte und nicht in der Main extra erstellt wird. Die Main sollte nur den Server starten.)
Nicht vergessen, wenn der Server beendet werden soll, alles ordentlich zu schließen - Streams und den Socket.
Wie vorher erwähnt gibt es Methoden die den Thread blockieren. In deinem Code wird nach dem sich ein Client verbunden hat auf eine Nachricht des Clients gewartet (die readline() blockiert bis die Nachricht gelesen wurde). Erst danach wird die aktuelle Zahl an den Client gesendet. Je nachdem was du vorhast, kann ja sein, dass das von dir so gewollt ist, empfiehlt es sich für den Empfang von Nachrichten des Clients ebenfalls ein extra Thread zu erstellen, sodass die Methoden sich nich gegenseitig blockieren. So wird auch unabhängig davon, ob der Client eine Nachricht senden will oder nicht, die aktuelle Zahl gesendet.
Zum Client:
So wie du den Client jetzt implementiert hast, wird vom Server auch nur was empfangen wenn auf den Senden-Button geklickt wurde. Es wird jedesmall eine neue Verbindung aufbauen. Besser wäre es nur einmal eine Verbindung aufzubauen und dann über die Verbindung Nachrichten senden und empfangen. Hier empfiehlt es sich das Empfangen in einen seperaten Thread auszulagern. Das Senden kann dabei im Ui-Thread bleiben da keine Methode diesen blockieren würde. Da der Server in einer (Endlos-)Schleife läuft wird nicht nur einmal die Zahl empfangen und auch nicht erst nachdem der Client eine Nachricht geschickt hat, sondern solange die Verbindung zum Server besteht.
Noch ein paar Tipps:
- Variablennamen werden am Anfang klein geschrieben
- Keine neue Klassen innerhalb vom Code, das macht das Lesen nur schwieriger
- Möglichst keine Warnungen ignorieren. Die Lint-Warnung besagt das es zu einem Leak führen kann, also den Handler static machen.
Hoffe das ist halbwegs verständlich und hilft dir etwas. Was mir damals auch geholfen hat ist diese Seite hier: Client/Server-Anwendung.
block_