# wie prüfe ich , ob ein socket connected is



## ryane (8. Okt 2010)

hallo leute , 
ich habe den folgenden code geschrieben womit ich mich auf ein server verbinde , nun soll mit die methode den status der verbindung zurückgeben. mit isConnected() und isBound()  funktioniert  leider nicht . weisst eine wie man es macht ? 

```
Thread connector ;
 public boolean connect(){
     connector = new Thread(new Runnable(){public void run(){
         try {
            server = InetAddress.getByName("192.168.1.8");
            socketAddress = new InetSocketAddress(server, port);
            socket = new Socket();
        } catch (UnknownHostException ex) {
            return;
        }
        try {
            socket.connect(socketAddress , 8000);
        } catch (IOException ex) {
            return;
        }

         if(socket.isConnected()) { // schein nicht zu funktionieren
             conState = true;    // in dieser variable möchte ich den status meiner konnektion checken
         }

     }});
     connector.start();

     return ???????   // eigentlich conState aber geht nicht immer
    }
```


----------



## Marcinek (9. Okt 2010)

Wieso geht das nicht immer?

Welcher Fehler kommt?

Schon mal debug genutzt?

Ich gehe davon aus, das du einen Timeout bekommst und dann einfach return machst. Dann wird natürlich die entsprechende Variable nicht gefüllt.


----------



## Volvagia (9. Okt 2010)

1) socket, socketAddress und conState sind nirgends deklariert.
2) Throwables sollten dringend gehandlet werden.
3) Für Rückgabewerte von Threads nimmt man Callable.
4) Warum so umständlich und nicht einfach per new Socket(IP, Port) verbinden?


----------



## Marcinek (9. Okt 2010)

zu 1) das sind bestimmt Membervariablen der umligenden Klasse ^^


----------



## ryane (9. Okt 2010)

> 1) socket, socketAddress und conState sind nirgends deklariert.


Diese variable sind schon deklariert worden , sind hier halt nicht zu sehen. sollte nicht das problem sein. 


> 4) Warum so umständlich und nicht einfach per new Socket(IP, Port) verbinden?


ich habe socketAdress()  benutzt, da man damit sehr einfach ein timeout setzen kann.


> 3) Für Rückgabewerte von Threads nimmt man Callable.


hast du da ein beispiel bitte? ich habe es noch nie benutzt. hier habe ich ein einziger thread der mir über eine variable sagen soll , ob mein socket verbunden ist.


> 2) Throwables sollten dringend gehandlet werden.


kein problem damit ich weisst wie man es behandelt und werde auch tun . 

Mit ging es nur darum euch  mein code zu damit damit ihr gegebensfall sagt wie ich  mien connected state prüfen soll .

.@ marcinek 

mit socket.isconnected() bekommt man immer den letzten connected zustand des socket , deshalb falls du ein mal connected war kriegst  du dann immer wieder true


----------



## Volvagia (9. Okt 2010)

```
public static void main(String[] args)
{
	ExecutorService executorService = Executors.newFixedThreadPool(1);
	Future<Boolean> conFuture = executorService.submit(new Callable<Boolean>() {
		public Boolean call() throws Exception
		{
			Socket socket = new Socket("85.158.183.169", 80);
			return(!socket.isClosed());
		}
	});
	
	doSomething();
	
	try
	{
		boolean isConnected = conFuture.get();
		System.out.println(isConnected);
	}
	catch (InterruptedException e)
	{
		e.printStackTrace();
	}
	catch (ExecutionException e)
	{
		e.printStackTrace();
	}
	executorService.shutdown();
}
```


----------



## ryane (9. Okt 2010)

Danke für den code werde gleich ausprobieren.


----------



## Marcinek (9. Okt 2010)

Der Ansatz des TO ist schon io.

Aber bei einer Exception wird die Variable nicht gesetzt.


----------

