# Strings versenden | Nur 1 Client



## b0unc3 (7. Dez 2006)

hay leudz,

hab da n kleines Problem.. also ich möchte einen String zum Sevrer senden und der Server soll sie dann auf der Konsole ausgeben.. allerdings gibt der server bei mir immer nur "null" aus, kann mir vielleicht jemand sagen warum?

Server:

```
import java.io.*;
import java.net.*;

public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(3141);
		
		while (true) {
			Socket client = server.accept();
			
			//InpuStream
			InputStream in		= client.getInputStream();
			BufferedReader rdr	= new
			BufferedReader(new InputStreamReader(in));
			
			//OutputStream
			
			String sTest = rdr.readLine();
			System.out.println(sTest);
			
			client.close();
		}
	}
}
```

Client:

```
import java.io.*;
import java.net.*;

public class Client {
	public static void main(String[] args) throws IOException {
		Socket server = new Socket("localhost", 3141);
		
		//InputStream
		InputStream in = server.getInputStream();
		BufferedReader rdr = new
		BufferedReader(new InputStreamReader(in));
		
		//OutputStream
		OutputStream out = server.getOutputStream();
		BufferedWriter wrt = new
		BufferedWriter(new OutputStreamWriter(out));
		
		wrt.write("Hallo, ich bin ein String");
		
		server.close();
	}
}
```


----------



## SlaterB (7. Dez 2006)

ich weiß jetzt nicht ganz genau die Reihenfolge der Handshakes,
nehme aber mal an, dass zwischen 'Bestätigung der Verbindung' und 'Ankunft des Strings vom Client' gut und gerne 300 ms vergehen,

deine Abfrage nach dem String findet aber direkt nach der Verbindung statt,
vielleicht 10 ms nach der Bestätigung,
warte doch mal ein bisschen


----------



## b0unc3 (7. Dez 2006)

also wenn ich ihn jetzt so warten lasse:

```
import java.io.*;
import java.net.*;

public class Server {
	public static void main(String[] args) throws IOException {
		ServerSocket server = new ServerSocket(3141);
		
		while (true) {
			Socket client = server.accept();
			
			//InpuStream
			InputStream in		= client.getInputStream();
			BufferedReader rdr	= new
			BufferedReader(new InputStreamReader(in));
			
			//OutputStream
			//kommt noch...
			
			try {
				server.wait(400);
			} catch (InterruptedException ex) {
				System.err.println(ex);
			}
			String sTest = rdr.readLine();
			System.out.println(sTest);
			
			client.close();
		}
	}
}
```

dann bekomme ich nach starten des Clients vom Server folgende Fehlermeldung von Eclipse:



> Exception in thread "main" java.lang.IllegalMonitorStateException
> at java.lang.Object.wait(Native Method)
> at Server.main(Server.java:20)



EDIT:

hab jetzt auch mal versuche int mit Thread.sleep() warten zu lassen, aber selbst bei 20000 ms gibt er mir immernoch nur null aus ...  :###


----------



## Murray (7. Dez 2006)

Du schreibst mit write einen String ohne zusätzlichen Zeilenumbruch, versuchst dann aber mit readln eine Zeile (also bis zum Zeilenumbruch) zu schreiben. Versuch im Client mal

```
wrt.write("Hallo, ich bin ein String"); 
wrt.write( "\r\n");
wrt.flush();
```


----------



## b0unc3 (7. Dez 2006)

hey cool so gehts, danke

//EDIT:

also wenn ich jetzt  den client wieder schließe, dann stürtzt der Server mit folgender meldung ab:



> Exception in thread "main" java.net.SocketException: Connection reset
> at java.net.SocketInputStream.read(Unknown Source)
> at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
> at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
> ...



kann mir jemand sagen, wass ich da machen kann?

oke habs gelöst habs in einen try-catch block getan

//EDIT:

also hab ein neues Problem, wie kann ich denn jetzt mehrere Clients anmelden? wenn ich nen 2ten starte von nem anderen pc, dann kommen die nachrichten von diesem nicht an   :###


----------



## Guest (8. Dez 2006)

b0unc3 hat gesagt.:
			
		

> also hab ein neues Problem, wie kann ich denn jetzt mehrere Clients anmelden? wenn ich nen 2ten starte von nem anderen pc, dann kommen die nachrichten von diesem nicht an   :###



Kann dir jetzt nicht ganz folgen. Solange der Server läuft kann sich immer eine Client anmelden, seinen String schicken und meldet sich dann wieder ab. Solange das alles hintereinander geschieht funktioniert das bei mir einwandfrei und das entspricht ja eigentlich auch deiner Aufgabenstellung oder?


> Titel: Strings versenden | Nur 1 Client



Wenn du willst, dass sich mehrere Clients gleichzeitig anmelden können und auch mehr als nur einen String senden sollen, solltest du vielleicht mit Threads arbeiten. Such mal ein bischen im Netzwerkforum hier, da gibts jede Menge Beispiele dazu.


----------



## b0unc3 (8. Dez 2006)

ja habs auch schon gefunden hab mich jetzt an diesem hier orientiert, danke

http://www.java-forum.org/de/viewtopic.php?t=6033&highlight=mehrere+verbindungen


----------

