# String von Server auslesen und interpretieren



## DarkUtopia (24. Nov 2010)

hallo leute,
ich studiere auf der TU Wien und habe nun programmieren.

ich habe ein problem momentan und zwar:

ich hab ein programm bekommen das einen server startet auf meinem rechner der dd:MM:yyyy:HH:mm:ss
das ausgibt

und ich soll diesen string oder die zeichenkette (ich weiß nicht wie ich es nennen soll) in ein vormat bringen wie 

Es ist der 12.11.2010 und es ist 23:25.

ja ich weiß nicht wie ich das machen soll?
vielleicht ein array mit 14 stellen und jede ziffer einzeln ausgeben und dann halt sie in dem format ausgeben?
und wie rufe ich den server auf bzw. benutze ihm?

da ist der code des servers


```
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;

public class TimeServer {

	public TimeServer() throws Exception {
		ServerSocket s = null;
		try {
			s = new ServerSocket(6667);
			System.out.println("Server running on 6667...");
		} catch (java.net.BindException e) {
			System.err
					.println("Can't start server. Port already in use.\nClose the previously running server to free the Port again.");
		}
		while (true) {
			try {
				Socket client = s.accept();
				TimeThread c = new TimeThread(client);
				c.start();
			} catch (java.lang.NullPointerException e) {
				System.err.println("Exiting...");
				break;
			}
		}
	}

	public static void main(String args[]) throws Exception {
		@SuppressWarnings("unused")
		TimeServer server = new TimeServer();

	}
}

class TimeThread extends Thread {
	private Socket outputS;

	public TimeThread(Socket s) {
		outputS = s;
	}

	public void run() {
		try {
			PrintWriter pout = new PrintWriter(outputS.getOutputStream(), true);
			SimpleDateFormat format = new SimpleDateFormat(
					"dd:MM:yyyy:HH:mm:ss");

			pout.println(format.format(new java.util.Date()));
			outputS.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
```

danke mal im vorraus!!!


----------



## AmunRa (24. Nov 2010)

Den String in ein Date parsen könntest du mit SimpleDateFormat

und ebenfalls mit SimpleDateFormat kannst du ein Date Objekt wieder in einen String wandeln der ein spezielles format hat, vl hilft dir das.


----------



## SlaterB (24. Nov 2010)

wie man sich zu einem Server verbindet solltest du gelehrt bekommen haben wenn du so eine Aufgabe lösen musst,
ansonsten google-Suche 'java socket client example'

beim Datum-Interpretieren wäre der Einsatz von SimpleDateFormat geschickt,
mit dem gleichen Format vom Server kannst du den String zu einem Date parsen,
dann das Date wieder formatieren mit einem Format "Es ist der dd.mm.yyyy und es ist xxirgendwas."


----------



## DarkUtopia (24. Nov 2010)

ja leider ist unsere vorlesung zum sch*****

und leider heißts es gibt eh einen link zu nem java online buch....
naja

ich werd das mal versuchen


----------



## Michael... (24. Nov 2010)

Schau mal in die run() des Serverthreads, da siehst Du wie das aktuelle Datum in einen String gewandelt wird. Du musst jetzt einfach nur den Weg zurück. Tipp: Schau mal die Doku zur Klasse SimpleDateFormat an.


----------



## ARadauer (24. Nov 2010)

DarkUtopia hat gesagt.:


> ja leider ist unsere vorlesung zum sch*****
> 
> und leider heißts es gibt eh einen link zu nem java online buch....
> naja
> ...



was naja? Du bist Student der TU Wien! Willst du das man dir beibringt wie man einen String zu einem Date parst? Lächerlich... Du bist kein Schüler mehr!


----------



## DarkUtopia (24. Nov 2010)

ARadauer hat gesagt.:


> was naja? Du bist Student der TU Wien! Willst du das man dir beibringt wie man einen String zu einem Date parst? Lächerlich... Du bist kein Schüler mehr!



wenn man das brauchen würde was ich studiere dann wäre es auch ok aber ich brauch das sicher nicht mehr.....

aber ich brauch darüber nicht zu disskutieren ich kanns nicht und darum frage ich nach wie ich es angehen soll...

wennsdir nicht passt brauchst jan icht kommenteiren!

und danke an die anderen!


----------



## Andi_CH (24. Nov 2010)

Wieso auf der clientseite ändern? Der Server soll doch gleich das liefern was wir brauchen?

```
public void run() {
        try {
            PrintWriter pout = new PrintWriter(outputS.getOutputStream(), true);
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd:MM:yyyy");
            SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm:ss");
            String timestamp = dateFormat.format(new java.util.Date()) + " und es ist " + timeFormat.format(new java.util.Date());
            pout.println(timestamp);
            outputS.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
```


----------



## DarkUtopia (24. Nov 2010)

also wenn ich die angabe verstanden habe, liefert der server schon diesen datums string,

und ich muss mich dort drauf connecten und das auslesen und dann halt ausgeben


----------



## Andi_CH (24. Nov 2010)

Siehe oben - hab gearde noch einen kleinen Fehler wegeditiert ....


----------



## SlaterB (24. Nov 2010)

2x new java.util.Date() in derselben Zeile ist ja nicht gerade schön und mit etwas Pech sind das zwei verschiedene Tage
wenn genau um Mitternacht ausgeführt


----------



## DarkUtopia (24. Nov 2010)

ich verstehe die antwort gerade nicht.

den source code den ich amanfang gepostet habe soll ich ausführen und an dem nichts verändern, und dann soll ich per eigener class auf den server den ich da starte zugreifen und den datums string auslesen und wieder verwenden..weiß nicht so recht was ich mit dem obrigen source code anfangen soll


----------



## Michael... (24. Nov 2010)

DarkUtopia hat gesagt.:


> weiß nicht so recht was ich mit dem obrigen source code anfangen soll


Ich würde das mal als Scherz deuten...


----------



## SlaterB (24. Nov 2010)

@DarkUtopia
als erstes brauchst du ein separates Programm welches vom (laufenden) Server liest, siehe meinen google-Suche-Vorschlag


----------



## DarkUtopia (24. Nov 2010)

genau genau, da bin ich grade auf der suche und versuche das gerade =))

aber mal danke sehr


----------



## Andi_CH (25. Nov 2010)

SlaterB hat gesagt.:


> 2x new java.util.Date() in derselben Zeile ist ja nicht gerade schön und mit etwas Pech sind das zwei verschiedene Tage
> wenn genau um Mitternacht ausgeführt



Ja das war mir auch klar, aber mir ist keine besser Lösung eingefallen

"dd:MM:yyyy und es ist HH:mm:ss" klappt nicht - das war der erste Versuch

applyPattern(String pattern) dürfte besser sein ...


FLÜSTER: ich wüsste übrigens auch nicht wie ich den server connecten soll (ist VIEL zu lange her ;-) ), aber ich hab auch nicht nach einer Lösung gesucht


----------



## SlaterB (25. Nov 2010)

```
SimpleDateFormat dateFormat = new SimpleDateFormat("dd:MM:yyyy' und es ist 'HH:mm:ss");
```
wäre das dann, ich meinte aber eher eine naheliegende universelle Lösung:


```
Date date = new Date();
String timestamp = dateFormat.format(date) + " und es ist " + timeFormat.format(date);
```
schon kann der Fehler gar nicht mehr auftreten


----------

