![]() |
|
Das Anwendungsbeispiel konzentriert sich darauf, eine Netzwerkfunktionalität zwischen dem Spieler (Client) und dem Rechner (Server) herzustellen. Hierzu sollen Sockets verwendet werden. Der Datenaustausch soll mittels TCP erfolgen. Im Folgenden müssen daher drei Systemkomponenten betrachtet werden: Die Implementierungen von Server und Client sowie das Protokoll, mittels dessen Daten ausgetauscht werden. Das Protokoll ist in diesem Fall sehr einfach: Es sind die Spielregeln des Spiels Schiffe versenken. Zunächst wird die Implementierung des Servers vorgestellt.
import java.net.*; public static void main(String[] args) throws IOException { String sendeZeile, empfangsZeile; serverSocket = new ServerSocket(4444); } catch (IOException e) { System.err.println("Port nicht verfügbar: 4444."); } clientSocket = serverSocket.accept(); } catch (IOException e) { System.err.println("Accept fehlgeschlagen."); } PrintWriter senden = new PrintWriter(clientSocket.getOutputStream(), true); //Nun zum Spielablauf System.out.println("Client schickt: "+empfangsZeile ); break; } } } Die Funktionsweise des Clients sollte dem Leser unmittelbar klar sein, da hierzu lediglich das Programmbeispiel der Verwendung von Sockets derart modifiziert wurde, dass der Protokollablauf integriert wurde. Der Client baut zunächst eine Socket-Verbindung auf und schickt über diese dann Daten. Nachdem das Spiel beendet ist, werden die Sockets und die Streams wieder geschlossen. Auch der im Folgenden angegeben Client arbeitet nach diesem Prinzip.
import java.io.*; public static void main(String[] args) throws IOException { String sendeZeile, empfangsZeile; SVSocket = new Socket("localhost", 4444); } catch (UnknownHostException e) { System.err.println("Host unbekannt: plato."); } catch (IOException e) { System.err.println("I/O zu localhost abgelehnt."); } //Nun zum Spielablauf System.out.println("Server schickt: "+empfangsZeile); break; } senden.close(); } } Die Funktionsweise des Clients ist ebenfalls ähnlich zu der des Socket-Beispiels. Hier sei darauf hingewiesen, dass eine Verbindung zum Rechner localhost aufgebaut wird. Auch in dieser Implementierung wird das Protokoll integriert. Das im Folgenden betrachtete Protokoll ist nur rudimentär realisiert. Ziel ist es hierbei, dass nur ein Container zur Verfügung steht, in den die gesamte Spiellogik integriert werden kann. Das Protokoll ist wie folgt realisiert:
public class SVprotocol { public SVprotocol () { } return "Start des Spiels"; } String output; } } Mittels der Methode begin wird es dem Client ermöglicht, ein Spiel zu beginnen. Die Methode verarbeiten wird von Server und Client dazu verwendet, Treffer festzustellen und festzulegen, welcher Spieler als nächstes an der Reihe ist. |
|
|