# Socket und Timeout



## DEvent (14. Mrz 2008)

Hallo
ich programmiere grade einen Server/Client. Der Client soll eine INFO Nachricht an einen Host/Port schicken, damit man weis ob dort mein Server ist. Der Server schickt im erfolg ein HALLO zurueck, wenn mein Server dort nicht laeuft kommt auch nichts zurueck und ich weis das an dem Host/Port nicht mein Server laeuft.

Nur habe ich ein Problem: Wenn ein einem Host/Port nichts ist, bekommt man ja eine schoene Exception "Connection refused." aber wenn dort zufaellig doch was ist, dann bleibt der Thread bei Socket#Socket(host, port) haengen.

Auch in einem Netzwerk, wenn man einen schlechten Ping hat, bleibt der Thread sehr lange in dem Konstruktor haengen.

Wie kann man da einen Timeout setzen? Ich habe schon versucht in etwa so zu machen:

```
thread = new Thread(new Runnable(){

socket = new Socket(host, port);

}, "socket-test-Thread");

thread.start();

timeout = new Timer();
timeout.schedule(new TimeBlub(){

    thread.stop();

}, 5000);
```

Aber das klappt nicht, der thread wird nicht beendet.
Wie macht man den das am besten?

Danke fuer Antworten.


----------



## Niki (14. Mrz 2008)

Ich glaube das ist das was du suchst: Socket#setSoTimeout


----------



## DEvent (15. Mrz 2008)

Niki hat gesagt.:
			
		

> Ich glaube das ist das was du suchst: Socket#setSoTimeout



Das kann ich aber erst _nach_ dem Konstruktor von Socken benutzen. Der bleibt aber _im_ Konstruktor haengen.


----------



## Niki (15. Mrz 2008)

```
String host = "localhost";
  int port = 1111;
  SocketAddress addr = new InetSocketAddress(host, port);
  Socket socket = new Socket();
  socket.soTimeOut(1000);
  socket.connect(addr);
```

Deswegen immer in der API Doc nachschauen. Die verrät einem solche Dinge


----------

