Klar - da habe ich nicht gut genug hingeschaut. Das Problem ist, dass der Client einen ObjectInputStream erzeugt:
[CODE=java]ObjectInputStream ois = new ObjectInputStream(s.getInputStream());[/CODE]
Dieser erwartet natürlich sofort die Initialisierung, d.h. es werden ein paar erste Bytes gelesen und auf die wartet der Client.
Also entweder das erst erzeugen, wenn die Nachricht gesendet wurde:
[CODE=java] writer = new PrintWriter(s.getOutputStream());
writer.println("select * from leute");
writer.flush();
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
ArrayList <String> al = (ArrayList<String>)(ois.readObject());
System.out.println(al.toString());[/CODE]
Oder dafür sorgen, dass der Server die Initialisierung sofort macht:
[CODE=java] System.out.println("Bin hier");
OutputStream os = sock.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.flush();
if((nachricht = reader.readLine()) != null)
{
System.out.println("Empfangene Nachricht: " + nachricht);
}[/CODE]
Beides behebt die Problematik - aber nur eins von beidem ist notwendig.