einfache Frage zu ServerSocket ...

Status
Nicht offen für weitere Antworten.

gilioner

Neues Mitglied
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
 
S

stev.glasow

Gast
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 ?
 

Freddy

Mitglied
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.
 

Jiriki

Mitglied
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....
 

Ebenius

Top Contributor
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]
 

Freddy

Mitglied
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.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Einfache Server Frage Netzwerkprogrammierung 5
E einfache Frage: wie Fehler untersuchen mit Tomcat Netzwerkprogrammierung 5
E Einfache Frage zu servlets und netbeans 6.5 Netzwerkprogrammierung 41
M HTTP Einfache Restanfrage Netzwerkprogrammierung 4
F Einfache Socket Verbindung Netzwerkprogrammierung 2
D Einfache Verbindung zu Linux Server und Datei auslesen Netzwerkprogrammierung 13
Dit_ HTTP Einfache HTTP-Anfrage Netzwerkprogrammierung 6
S Socket Einfache Client/Server-Anwendung Netzwerkprogrammierung 11
Y einfache TCP/IP Anwendung Netzwerkprogrammierung 4
D Einfache Applet-Servlet-Kommunikation Netzwerkprogrammierung 5
J Frage zum Keystore Netzwerkprogrammierung 21
E Socket Frage Netzwerkprogrammierung 6
T Frage bzgl. Socket-API Netzwerkprogrammierung 1
C Jetty 9 Non Blocking Handler Frage... Netzwerkprogrammierung 1
O log4j Appender Frage Netzwerkprogrammierung 6
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
C Frage zu Threads & Server Netzwerkprogrammierung 4
P Eine etwas andere Frage: Sicherheit Netzwerkprogrammierung 5
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5
M allgemeine Frage zu einem Web Service Client Netzwerkprogrammierung 2
Q Frage zur Socketprogrammierung Netzwerkprogrammierung 12
D HTTP Frage zu Login & Session ID Netzwerkprogrammierung 5
D HTTP nochne frage zu http requests Netzwerkprogrammierung 6
D "Fileserver" Frage + Mit Java zugreifen Netzwerkprogrammierung 9
S Socket-Frage zu einem LAN-Spiel. Netzwerkprogrammierung 3
Helgon Socket Socket IP Frage + Tutorial/Bücher Netzwerkprogrammierung 5
C Webservice Frage Netzwerkprogrammierung 2
M RMI Code Frage: Netzwerkprogrammierung 4
C Frage zur Klasse DatagramPacket Netzwerkprogrammierung 2
xDarkSunx Kleine Frage authentifizierung Netzwerkprogrammierung 13
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
H Input-/OutputStream Frage Netzwerkprogrammierung 6
N Frage zu JNDI Netzwerkprogrammierung 2
B Frage zu einer Lösung (RMI) Netzwerkprogrammierung 2
X FAQ Frage - Netzwerkgrundlagen - ServerSocket und Socket Netzwerkprogrammierung 4
G Netzwerk IP Frage Netzwerkprogrammierung 4
S NanoHTTPD Server frage Netzwerkprogrammierung 5
N Frage/Problem mit RMI Netzwerkprogrammierung 3
Kr0e Frage zu SO_TIMEOUT Netzwerkprogrammierung 3
K SCP und die Frage: Wie geh ich damit um? Netzwerkprogrammierung 7
K Frage zum Verhalten von SocketChannel.write(.) Netzwerkprogrammierung 9
G Frage zu Serversocket-Beispiel aus der FAQ Netzwerkprogrammierung 17
A Frage zur Verschlüsselung mit CipherInputStream Netzwerkprogrammierung 7
H Frage zu RMI Netzwerkprogrammierung 4
5 Grundlegende Design-Frage zu Webservices Netzwerkprogrammierung 16
C Frage zur ipcam WVC54GC von linksys ? Netzwerkprogrammierung 1
ven000m Mittlere Wartezeit Frage Netzwerkprogrammierung 5
T Frage bei Irc Verbindung Netzwerkprogrammierung 10
ven000m Frage aus einer mündl. Prüfung - wer kennt die Antwort? Netzwerkprogrammierung 6
S Serveranfrage - allgemeine Frage Netzwerkprogrammierung 2
ven000m Thread Frage Netzwerkprogrammierung 11
D Frage: Buffered Reader --> Wie komm ich an die Daten (Byt Netzwerkprogrammierung 3
H Frage zur Performance Netzwerkprogrammierung 10
flashfactor Frage zu HTML-Response Netzwerkprogrammierung 4
S GEHT DAS? - Nur eine Frage! (Printer Port direkt ansteuern?) Netzwerkprogrammierung 4
K Frage zu Net Send Netzwerkprogrammierung 7
G Frage zu JNDI / RMI Netzwerkprogrammierung 4
A ServerSocket prinzipielle Frage Netzwerkprogrammierung 5
M generelle Frage zum Versenden Netzwerkprogrammierung 4
L Frage nach Socket Netzwerkprogrammierung 4
E frage zu streams Netzwerkprogrammierung 2
Luma Verschiedene Frage zu nem Netzwerkprog Netzwerkprogrammierung 6
E Custom E Mail Adresse mithilfe Serversocket oder ähnliches Netzwerkprogrammierung 21
Tobero Java serversocket nicht nur zuganglich für localhost Netzwerkprogrammierung 6
D ServerSocket - Socket Verbindungsart Netzwerkprogrammierung 3
J 1 Socket - 2 Serversocket Netzwerkprogrammierung 4
J Client - Serversocket Netzwerkprogrammierung 1
Seikuassi Socket ServerSocket mehrmals erzeugen Netzwerkprogrammierung 1
cezary Socket ServerSocket starten über GUIIm unterstehenden Code versuche Netzwerkprogrammierung 6
J ServerSocket sauber beenden Netzwerkprogrammierung 3
H ServerSocket.accept() unterbrechen Netzwerkprogrammierung 3
TheJavaKid ServerSocket beendet mit PuTTy Netzwerkprogrammierung 9
T ServerSocket.accept Rückgabetyp casten Netzwerkprogrammierung 3
P Socket Daten senden mit ServerSocket? Netzwerkprogrammierung 2
4 Socket Kann kein ServerSocket erstellen Netzwerkprogrammierung 4
D Socket ServerSocket Push Netzwerkprogrammierung 5
G ServerSocket.accept() überschreibt IP-Adresse Netzwerkprogrammierung 4
C serversocket.accept() klappt nicht Netzwerkprogrammierung 10
Tobse HTTP ServerSocket HTTP Netzwerkprogrammierung 4
M Wahrnehmen, dass ServerSocket geschlossen wurde Netzwerkprogrammierung 14
T ServerSocket bleibt beim lesen von Input hängen Netzwerkprogrammierung 2
M ServerSocket.accept() abbrechen Netzwerkprogrammierung 8
Schandro Herausfinden ob hinter einem Port bereits ein ServerSocket steckt Netzwerkprogrammierung 2
2 Class mit ServerSocket erbt von Thread? Netzwerkprogrammierung 3
T Java Socket und ServerSocket über Internet-IP? Netzwerkprogrammierung 9
dayaftereh serverSocket.accept(); Wecken Netzwerkprogrammierung 2
D Komisches Fenster bei Serversocket Netzwerkprogrammierung 2
M Kommunikation zwischen ServerSocket und Socket Netzwerkprogrammierung 2
F ServerSocket im internet zugänglich machen Netzwerkprogrammierung 15
H ServerSocket -> Zugriff nur von localhost Netzwerkprogrammierung 6
P Serversocket schmeißt immmer EOFEXCEPTION Netzwerkprogrammierung 2
A serversocket soll anfrage vom handy entgegennehmen Netzwerkprogrammierung 4
P Problem mit Socket und ServerSocket Netzwerkprogrammierung 2
S ServerSocket merkt nicht, wenn keiner mehr da ist Netzwerkprogrammierung 8
J ServerSocket vs. DatagramSocket Netzwerkprogrammierung 2
D Problem ServerSocket global Netzwerkprogrammierung 3
J ServerSocket schließen / öffnen im Programmverlauf Netzwerkprogrammierung 4

Ähnliche Java Themen


Oben