Socket Problem (Methode isConnected)

wissensdurstig

Grünschnabel
Die Methode isConnected macht mir Probleme, welche nicht annähernd
eindeutig erklärbar sind, für mich. :)

Habe ein Socket erstellt in meiner Client Anwendung und wenn ich irgendwelche
Aktionen ausführen möchte, will ich abfragen ob die Verbindung noch steht.

Beispielsweise kann ich keine Daten vom Server anfordern wenn der Server nicht
mehr da ist.

Also habe ich einfach folgendes geschrieben

if (verbindung.isConnected)
{
>> hole Daten <<
}
else
vlost();

Wenn eben die Verbindung da ist, holt er die Daten...wenn nicht ruft er die Methode vlost() auf.

Soweit die Theorie...aber wenn ich verbunden bin und die Verbindung trenne (also klam heimlich den Server schliesse), macht mein Client trotzdem die Datenanforderung statt die lost-Methode zu rufen und natürlich gibs dann Fehler weil der Server nicht da ist.

Was ist falsch, was habe ich falsch verstanden?

Freue mich auf Anregungen :)

Gruss,
w
 
Ich tippe mal darauf, dass das Atribut isConnected auf true gesetzt wird, wenn eine Verbindung aufgebaut wird und wieder auf false, wenn man mit verbindung.close() trennt. Ich denke, da mußt du die Exception abfangen!
 
Hallo!

Wenn mit du mit !socket.isClosed() prüfst bekommst du keine Exception :)
aber schau doch mal hier:
Server:
Code:
/**
 * 
 */
package de.tutorials;

import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;

/**
 * @author Tom
 */
public class SocketServer {

	/**
	 * @param args
	 */
public static void main(String[] args) throws Exception {
		ServerSocket serverSocket = new ServerSocket(9876);

		Random rnd = new Random();

		System.out.println("Waiting for Connection...");

		Socket socket = serverSocket.accept();

		DataOutputStream dos = new DataOutputStream(socket.getOutputStream());

		for (long startTime = System.currentTimeMillis(), currentTime = startTime; currentTime
				- startTime < 10000; currentTime = System.currentTimeMillis()) {
			System.out.print("Server: ");
			int data = rnd.nextInt();
			System.out.println(data);
			dos.writeInt(data);
			dos.flush();
		}

		
		dos.close();
		socket.close();
		System.out.println("Server shutdown...");

	}}

Client:
Code:
/**
 * 
 */
package de.tutorials;

import java.io.DataInputStream;
import java.net.Socket;

/**
 * @author Tom
 */
public class SocketClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception {
		Socket socket = new Socket("localhost", 9876);

		DataInputStream dis = new DataInputStream(socket.getInputStream());

		while (!socket.isClosed()) {
			System.out.println(dis.readInt());
		}

		dis.close();
		socket.close();

	}
}



Gruß Tom
 
Das sieht schon mal interessant aus. :) Werde ich mir heute Nachmittag an die Brust nehmen und melde mich nochmal ob es so funktioniert wie es soll. Bis nachher...
 
also irgendwie haut das nicht hin, wenn ich mich verbinde und dann den server "heimlich" schliesse und dann im client "daten anfordern" klicke kommt leider nicht die die nachricht das die verbindung verloren ist sonder er fordert trotzdem die daten an und dann kommt da erst eine exception :(


habs auch mit isClosed probiert
 
Zurück