Hallo Leute!
Ich habe folgendes Problem:
Das Beispiel stanmmt aus einem Buch, sollte deswegen auch kunktionieren Alle drei Klassen compilieren ohne Fehler. Der Server stürzt nicht ab (java DateTimeServer 2222).
Der Client bricht jedoch nach 2 Sekunden wie der zusammen, weil er den DNS Eintrag nicht findet: Ich starte mit java MyClient localhost, 2222.
Hier der Quellcode:
wäre echt super wenn mir da jemand helfen könnte
Ich habe folgendes Problem:
Das Beispiel stanmmt aus einem Buch, sollte deswegen auch kunktionieren Alle drei Klassen compilieren ohne Fehler. Der Server stürzt nicht ab (java DateTimeServer 2222).
Der Client bricht jedoch nach 2 Sekunden wie der zusammen, weil er den DNS Eintrag nicht findet: Ich starte mit java MyClient localhost, 2222.
Hier der Quellcode:
Code:
import java.io.*;
import java.net.*;
class DateTimeServer{
public static void main(String[] args) {
try {
int port = Integer.parseInt(args[0]); //Port-Nummer
ServerSocket server = new ServerSocket(port); //Server-Socket
System.out.println("DateTimeServer läuft"); //Statusmeldung
while (true) {
Socket s = server.accept(); //Client-Verbindung akzeptieren
new DateTimeDienst(s).start(); //Dienst starten
}
}
catch (ArrayIndexOutOfBoundsException ae) {
System.out.println("Aufruf: java DateTimeServer <Port-Nummer>");
}
catch (IOException e) {
e.printStackTrace();
}
}
}
Code:
import java.io.*;
import java.net.*;
import java.util.*;
import java.text.*;
class DateTimeDienst extends Thread {
static SimpleDateFormat //Formate für den Zeitpunkt
time = new SimpleDateFormat("Es ist gerade 'H'.'mm' Uhr."),
date = new SimpleDateFormat("Heute ist 'EEEE', der 'dd.MM.yy");
static int anzahl = 0; //Anzahl der Clients insgesamt
int nr = 0; //Nummer der Clients
Socket s; //Socket in Verbindung mit dem Client
BufferedReader vomClient; //Eingabe-Strom vom Client
PrintWriter zumClient; //Ausgabe-Strom zum Client
public DateTimeDienst(Socket s) { //Konstruktor
try {
this.s = s;
nr = ++anzahl;
vomClient = new BufferedReader(
new InputStreamReader(
s.getInputStream()));
zumClient = new PrintWriter (
s.getOutputStream(),true);
}
catch (IOException e) {
System.out.println("IO-Error bei Client " + nr);
}
}
public void run () { //Methode die das Protokollabwickelt
System.out.println("Protokoll fuer Client " + nr + " gestartet");
try{
while (true) {
zumClient.println("Geben Sie DATE,TIME oder QUIT ein");
String wunsch = vomClient.readLine(); //vomClient empfangen
if (wunsch == null || wunsch.equalsIgnoreCase("quit")) {
break; //Schleife abbrechen
}
Date jetzt = new Date(); // Zeitpunkt bestimmen
//vom Client empfangenes Kommando ausführen
if (wunsch.equalsIgnoreCase("date")) {
zumClient.println(date.format(jetzt));
}
else if (wunsch.equalsIgnoreCase("time")){
zumClient.println(time.format(jetzt));
}
else {
zumClient.println(wunsch + "ist als Kommando unzulässig!");
}
}
s.close(); //Socket (und damit auch Ströme) schließen
}
catch (IOException e) {
System.out.println("IO-Error bei Client " + nr);
}
System.out.println("Protokoll für Client " +nr + " beendet");
}
}
Code:
import java.io.*;
import java.net.*;
public class MyClient {
//liest alle alle vom Server geschickten Daten
static void zeigeWasKommt(BufferedReader sin) throws IOException {
String str = null;
try {
while ((str = sin.readLine()) != null)
System.out.println (str);
}
catch (SocketTimeoutException sto) {
}
}
static void zeigePrompt() {
System.out.print("> ");
System.out.flush();
}
public static void main (String[] args) {
try {
System.out.println("Client läuft. Beenden mit QUIT.");
Socket c = new Socket(args[0], Integer.parseInt(args[1]));
c.setSoTimeout(500); // setze Timeout auf eine halbe Sekunde +
BufferedReader vomServer = new BufferedReader(
new InputStreamReader(
c.getInputStream()));
PrintWriter zumServer = new PrintWriter(
c.getOutputStream(),true);
BufferedReader vonTastatur = new BufferedReader(
new InputStreamReader(
System.in));
String zeile;
do {
zeigeWasKommt(vomServer);
zeigePrompt();
zeile = vonTastatur.readLine();
zumServer.println(zeile);
} while(!zeile.equalsIgnoreCase("quit"));
c.close(); //Socket (und damit Ströme) schließen
}
catch (ArrayIndexOutOfBoundsException ae) {
System.out.println("Aufruf: java MyClient <Port-Nummer>");
}
catch (UnknownHostException ux) {
System.out.println("Kein DNS-Eintrag fuer " + args[0]);
}
catch (IOException e) {
e.printStackTrace();
}
}
}
wäre echt super wenn mir da jemand helfen könnte