read() und write()

Status
Nicht offen für weitere Antworten.

ninili

Mitglied
Hallo,

ich arbeite gerade an einem kleinen Time-Service der über eine Socket-Verbindung je nach Eingabe die Zeit oder das Datum ausgibt. Leider funktionieren die Befehle read() und write() nicht. Kann mir vielleicht jemand weiterhelfen?

Code:
import java.io.*;
import java.net.*; //Package 

public class TimeService {

	public static void main(String[] args) throws IOException {
		
		ServerSocket server = new ServerSocket(1024);

		while (true) {
			Socket client = null;

			try {
				client = server.accept();
				handleConnection(client);
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				if (client != null)
					try {
						client.close();
					} catch (IOException e) {
					}
			}
		}
	}

	public static void handleConnection(Socket client) throws IOException {
		while (client.isConnected()) {
			InputStream in = client.getInputStream();
			OutputStream output = client.getOutputStream();

			String input = in.toString();

			output.write("time service");
			output.newLine();


			if (input.equals("time")) {
				output.write(Clock.time());
				output.newLine();
			} else {
				if (input.equals("date")) {

					output.write(Clock.date());
					output.newLine();
				} else {
					client.close();
				}
			}
		}
	}
}


Die Klasse Clock sollte nicht verändert werden.
Code:
import java.text.SimpleDateFormat;
import java.util.Date;

public class Clock {

	public static SimpleDateFormat timeFormatter = new SimpleDateFormat("kk:mm:ss");
	
	private static SimpleDateFormat dateFormatter = new SimpleDateFormat("dd.MM.yyyy");
	private static Date d = new Date();
	
	public static String date() {
		d.setTime(System.currentTimeMillis());
		return dateFormatter.format(d);
	}
	
	public static String time() {
		d.setTime(System.currentTimeMillis());
		return timeFormatter.format(d);
	}
	
}
 

HoaX

Top Contributor
zeile 33 ist unsin. das ding ist ein inputstream, also benutze read zum lesen. toString gibt dir keinerlei daten zurück die da im stream stehen.

zu deiner clock klasse: wieso verwendest du immer das selbe date objekt und setzt die zeit neu? mach doch in die funktion date() einfach ein "return new Date()" und gut is ;)
 

ninili

Mitglied
Die Clock-Klasse wurde vorgegeben, die kann ich nicht ändern.

Auch wenn ich die 33. Zeile lösche und die Variablen dann entsprechend abändere, kann ich immernoch keine Ausgabe machen. Wo liegt da der Fehler oder weiß jemand eine andere Methode dafür?
 
S

SlaterB

Gast
zunächst mal: lasse die if/ else weg, und sende etwas zurück, egal welche Eingabe ankommt (in der Testphase)

mit dem Streams bist du wohl noch nicht besonders vertraut oder?
kann ich persönlich im Detail hier kaum erklären,
klaue ein wenig von folgendem Beispiel:
http://www.inf.fu-berlin.de/lehre/SS03/javakurs/index.html
->
http://www.inf.fu-berlin.de/lehre/SS03/javakurs/src/EchoServerThreaded.java

und zwar
Code:
	BufferedReader is =
	  new BufferedReader(new InputStreamReader(sock.getInputStream()));
	PrintStream os = new PrintStream(sock.getOutputStream(), true);
	String line;
	while ((line = is.readLine()) != null) {
	  os.print(line + "\r\n");
	  os.flush();
	}
damit sollte sowohl String lesen (is.readLine()) als auch String schreiben (os.print(line + "\r\n"); ) klappen
 

ninili

Mitglied
Dankeschön, jetzt wird immerhin schon nen Teil ausgegeben. Mit den If-Bedingungen stimmt noch was nicht, aber das müsste ich hinbekommen.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben