java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Java - Programmierung > Netzwerkprogrammierung

Netzwerkprogrammierung Fragen zu Client-/Server-Programmierung sowie zu verteilten Anwendungen (RMI, CORBA etc.)

Thema geschlossen    
Themen-Optionen Thema durchsuchen Ansicht
Alt 04.11.2003, 14:51   #1 (permalink)
Neuer Benutzer
Bit
 
Registriert seit: 04.11.2003
Fachbeiträge: 1
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Standard einfache Frage zu ServerSocket ...

Hallo,

wenn ich ein ServerSocket erstelle und sich ein Client verbindet, möchte ich solange Nachrichten des Clients auslesen, bis die Verbindung clientseitig geschlossen wird.

Nur weiß ich nicht, wie der Server erfahren kann, ob eine Verbindung geschlossen wurde.

Hier mein Codeausschnitt:

Server:
Code:
		try{
			ServerSocket server = new ServerSocket(6000);
			int count=0;
			while(true)
			{
				System.out.println("Server wurde gestartet (Port "+server.getLocalPort()+")");
				Socket socket = server.accept();
				BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				String clientwrite="";
				while(!clientwrite.equalsIgnoreCase("bye"))
				{
						clientwrite = in.readLine();
						System.out.println("Client sagt: "+clientwrite);
				}
				in.close();
				socket.close();
			}
		}catch(Exception e)
		{
			System.out.println("Fehler");
		}
Client:
Code:
		try
		{
			Socket client = new Socket("localhost",6000);
			//OutputStream out = client.getOutputStream();
			//OutputStreamWriter writer = new OutputStreamWriter(client.getOutputStream());
			BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
			writer.write("test\n");
			writer.write("bye\n");
			writer.close();
			client.close();
		}catch(Exception e)
		{
			System.err.println("Fehler: "+e.getMessage());
		}
Statt
Code:
while(!clientwrite.equalsIgnoreCase("bye"))
möchte ich eine Überprüfung haben, ob die Verbindung vom Clienten schon geschlossen wurde (also
Code:
client.close()
ausgeführt wurde).
Code:
!socket.isClosed()
oder
Code:
socket.isConnected()
ist immer true, solange die Verbindung nicht vom SERVER geschlossen wurde.

Wie kriege ich das hin?

Vielen Dank


MfG
gilioner
gilioner ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 06.11.2003, 18:43   #2 (permalink)
stev.glasow
Nicht angemeldet
 
Fachbeiträge: n/a
weis nicht genau was du meinst, aber das while(!clientwrite.equalsIgnoreCase("bye")) muss durch while(server.isConnected()) ersetzt werden.

war's das was du wissen wolltest ?
 
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 10.11.2003, 17:09   #3 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 12.08.2003
Fachbeiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
ServerSocket definiert keine Methode isConnected(). Außerdem wäre das in diesem Fall sinnlos, da nur der Server selbst seinen eigenen Socket schließen kann. Er möchte viel mehr wissen, wie er herausbekommt, ob der Client seine Verbindung geschlossen hat.
Ich programmiere einen Chat und zerbreche mir jetzt seit knapp einem Jahr den Kopf über dieses Problem. Ich habe es auch mit den Methoden isClosed() usw. probiert, aber das geht nicht, da diese nur lokale Veränderungen anzeigen (wenn man z.B. Socket.close() aufruft). Es scheint so, als ob man dem Client etwas senden muss, um zu prüfen, ob die Verbindung noch besteht. Wenn beim Aufruf von write() eine Exception auftritt, dann wurde die Verbindung abgeschlossen.
Allerdings habe ich schon Chatsysteme gesehen, die das anders lösen, nur bin ich bisher nicht dahintergekommen, wie.
Freddy ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 10.11.2003, 22:22   #4 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 07.11.2003
Fachbeiträge: 15
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
nen chat client muss ich in den nächsten 1-3 wochen auf programmieren
werd dir dann mal mein programm posten
dauert aber noch ne weile....
Jiriki ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 18.11.2003, 02:10   #5 (permalink)
Java-Forum Team
Moderator
 
Benutzerbild von Ebenius
 
Registriert seit: 17.11.2003
Fachbeiträge: 4.827
Abgegebene Danke: 21
Erhielt 209 Danke für 187 Beiträge
Standard Alternativen

Mir ist keine Möglichkeit bekannt direkt am Socket benachrichtigt zu werden, wenn die Gegenseite den eigenen Socket schließt. Da diese Möglichkeit meines Kenntnisstandes nicht existiert, bleiben folgende (vielleicht weitere) Alternativen:

* Bidirektionale Kommunikation zwischen Client und Server. Regelmäßige Abfrage des Clients vom Server aus (Request-Response).
* Stream-close-signature (z.B. "bye"-string) und timeout, wobei dann besser ein ordentlich definitiertes und implementiertes Protokoll genutzt werden sollte.
* Kombination aus 1 und 2 (sehr oft zweckmäßig)

Was anderes fällt mir nicht ein.

Grüße
Ebenius[/code]
Ebenius ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Alt 26.11.2003, 13:36   #6 (permalink)
Neuer Benutzer
byte
 
Registriert seit: 12.08.2003
Fachbeiträge: 13
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
Es gibt eine Möglichkeit ohne irgendwelche "Pings": Die Methode SocketInputStream.read() wirft eine IOException, sobald die Gegenseite die Verbindung (sauber) schließt. Eigentlich sollte dein BufferedReader dies auch tun. Deswegen wäre es besser, die zweite Endlosschleife in einen try-Block zu packen.
Ich nutze dieses Prinzip in abgewandelter Form jetzt auch bei meinem Chat.
Freddy ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Thema geschlossen    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
einfache Frage zu Klassen Spin Java Basics - Anfänger-Themen 12 03.12.2008 14:08
Frage zu Serversocket-Beispiel aus der FAQ Netzwerkprogrammierung 17 15.07.2008 15:05
Einfache Frage zur Mehrfachvererbung alipkp Java Basics - Anfänger-Themen 3 26.05.2007 12:53
MVC-einfache frage lucci Java Basics - Anfänger-Themen 13 09.11.2004 16:42
ServerSocket prinzipielle Frage akira Netzwerkprogrammierung 5 20.06.2004 18:33


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:06 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de