Wegwerf Client

Loud Silence

Bekanntes Mitglied
Wie kann man verhindern, dass sich ein Client, nachdem er einen InputStream vom Server erhalten hat, gleich wieder schließt? Dass man also noch weiter Informationen an den Client schicken kann, ohne diesen wieder neu starten zu müssen.

Vielen Dank im Voraus
 
M

Marcinek

Gast
Zu beispiel mit einem Thread.

Java:
while(is not ende)

Ein Programm schließt sich immer dann, wenn er alle Operationen ausgeführt hat.
 

Loud Silence

Bekanntes Mitglied
Diese Überlegung hatte ich auch schon angestellt.
Aber wann soll der Thread gestartet werden.
Der Client muss ja im Prinzip immer hören, ob da etwas ankommt.
 

Loud Silence

Bekanntes Mitglied
Hier erst mal ein bisschen Quellcode:

Java:
import java.net.*;
import java.awt.Frame;
import java.io.*;
public class Client{
 
    
    Client() throws IOException {
        Socket server = new Socket ("localhost", 1234);
       ServerThread st = new ServerThread(server);
        st.start();
        server.close();
       br.close();
    }
 
        public static void main(String[] args) {
        	
            try{
                Client client = new Client();
            }catch (IOException e) {
                System.out.print(e);
                
    }
    
 
    }
 
}

Server Thread

Java:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
 
public class ServerThread extends Thread{
private Socket s;
public ServerThread(Socket server) {
this.s = server;
}
 
public void run(){
	
	
	try{
BufferedReader br = new BufferedReader(new InputStreamReader (s.getInputStream()));
int x = Integer.parseInt(br.readLine());
if (x == 1){
	System.out.println("Works");
}
	else{
		System.out.println("Wrong Int");
	}


//br.close();
	} catch(IOException e){
	System.out.println("Fehler");
}
}
}

Jetzt schließt sich der Client gleich nachdem ein Zahl vom Server empfangen wurde.
Wenn ich eine neue Zahl schicken will, muss ich den Client neu starten.
Das sollte nicht so sein.
Ich will also, dass er offen bleibt.
 

madboy

Top Contributor
wenn du pro Client nur eine Verbindung zum Server brauchst, kannst du das auch ohne Threads machen. So z.B. (nicht getestet!):
Java:
public static void main(String[] args) {
   Socket s = new Socket ("localhost", 1234);
   BufferedReader br = new BufferedReader(new InputStreamReader (s.getInputStream()));

   String line;   
   while((line = br.readLine()) != null) {       	
      try{

         int x = Integer.parseInt(line);
         if (x == 1){
            System.out.println("Works");
         }
         else{
            System.out.println("Wrong Int");
         }

      }catch (IOException e) {
          System.out.print(e);

      }
   }
   br.close();
}

Damit liest du zeilenweise alles ein was der Server schickt und machst daraus ints.

Falls du was anderes tun willst, bitte mal genau schrittweise schreiben was wann wie passieren soll.
 

Loud Silence

Bekanntes Mitglied
Also wenn deine Lösung verhindert, dass der Client einmal etwas entgegen nimmt und sich dann schließt, bin ich schon zufrieden.
Es soll einfach nur eine Zahl empfangen werden und diese aufschreiben.

Edit:
Ich denke nicht, dass es am Client liegt...
Aber was ist dann das Problem
Hier die Fehlermeldungen wenn ich versuch eine zweite Zahl abzusenden:

Exception in thread "AWT-EventQueue-0" java.lang.IllegalThreadStateException
at java.lang.Thread.start(Unknown Source)
at KleinerServer$1.actionPerformed(KleinerServer.java:36)
at java.awt.Button.processActionEvent(Unknown Source)
at java.awt.Button.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.awt.EventQueue$2.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
 
Zuletzt bearbeitet:

Loud Silence

Bekanntes Mitglied
Ich weiß jetzt nicht genau was du meinst.
Was heißt am Thread?

Vllt. sollte ich noch dazu sagen:
Wenn ich den Server offen lasse und den Client einfach immer wieder neustarte funktioniert alles einwandfrei.
Nur wenn der Client offen bleiben soll was er nicht tut) passiert das.
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Code:
        st.start();

wird das am gleichen Objekt zwei mal aufgerufen?

Was genau passiert in dem Thread?
 

njans

Top Contributor
Du wirst dem Thread ja irgendwie sagen, dass er anfangen soll run() auszuführen.
Das kannst du mit Thread.run() machen oder mit Thread.start().
Du solltest aber, wenn du den parallel nutzen willst start() nutzen :)
 

Loud Silence

Bekanntes Mitglied
Der Button startet den ServerThread:

Java:
public void actionPerformed( ActionEvent ae ) {
    	  st.start();
       
      }

ServerThread


Java:
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
 
public class ServerThread extends Thread{
private Socket s;
public ServerThread(Socket client) {
this.s = client;
}
 
public void run(){

	
	
	try{
String str = "Hallo";
	BufferedWriter out = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
out.write(KleinerServer.tf.getText());
out.newLine();
out.flush();

out.close();
	} catch(IOException e){
	System.out.println("Fehler");
}
}
}
 
M

Marcinek

Gast
Naja offensichtlich rifst du start() am gleichen Trhead auf und dann womöglich noch dann, wenn er bereits läuft ==> das ist "Illegal"
 

Loud Silence

Bekanntes Mitglied
Es muss doch eine Möglichkeit geben den Client einfach offen zu halten.
Mehr brauch ich gar nicht.
Er darf sich bloß nur nicht nach einmaliger Verwendung gleich schließen.
 
G

Gast2

Gast
es gibt mehr als genug Tutorials wo das Grundprinzip für Client-Server erklärt wird ... die gibt es in allen Sprachen - das Prinzip bleibt aber gleich
 

Loud Silence

Bekanntes Mitglied
Das ist durchaus richtig, ich habe jedoch noch keines gefunden, bei dem der Client nicht sofort schließt.
Wuerde mich aber über einen link freuen.
 

Loud Silence

Bekanntes Mitglied
Oh, das hatte ich glatt vergessen.
Tut mir leid!
Und natürlich funktioniert er genau so wie ich es wollte.
Allerdings brauche ich gar nicht so viele Funktionen.
Ich habe versucht den Code runterzubrechen und habe mir die Class Client näher angeschaut.
Jedoch habe ich nicht den Knackpunkt gefunden der dafür sorgt dass sich der Client nicht schließt.
Wo finde ich den?
 
Zuletzt bearbeitet:

andiv

Bekanntes Mitglied
Naja, der "Trick" ist halt einfach, dass in der run-Methode des ClientReadingThreads, des ReceivingThreads und des "SendingThreads" eine (mehr oder weniger) Endlosschleife steht. Dadurch wird es möglich beliebig oft Daten zu senden und zu empfangen. Wenn du nicht verstehst wie der Programmcode von Michael funktioniert solltest du dir vielleicht nochmal ein gutes Java-Buch zu Hand nehmen und erstmal deine Grundlagenkenntnisse auf Vordermann bringen.
 

Michael...

Top Contributor
Der Knackpunkt ist das MultiThreading und die while Schleifen auf Client und Serverseite die solange auslesen, solange es etwas zu lesen gibt bzw. die Verbindung zwischen beiden offen ist.

Client und Server sind ziemlich ähnlich aufgebaut. Sobald eine Verbindung aufgebaut ist, wird das Socket (man könnte auch direkt den InputStream nehmen) an ein Runnable Objekt übergeben. Dieses "startet" sich selbst in einem separaten Thread, in dem dann vom InputStream gelesen wird.
Der zusätzliche Thread (ist im Nachhinein eigentlich überflüssig) im ReadingThread des Clients dient nur zur Demo, um von der Konsole zu lesen. Genauso gut könnte man eine GUI verwenden, um dann per Listener die sendMessage() des Clients aufzurufen und einen String an den Server zu übertragen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Warum wird mir auf der Konsole des Servers nicht "xxxx" angezeigt (Server/Client) Java Basics - Anfänger-Themen 4
K Verständnis Problem bei Server/Client Java Basics - Anfänger-Themen 2
K Warum wird mir "Empfangen vom Client:" nicht sofort ausgegeben(Server/Client) Java Basics - Anfänger-Themen 3
K Verständnisproblem bei Server/Client Java Basics - Anfänger-Themen 3
A Server - Client Nachrichtenaustausch über Eventbus Java Basics - Anfänger-Themen 12
berserkerdq2 Sende eine Nachricht an den Client und leere den Ausgabestorm, was ist damit genau gemeint? Java Basics - Anfänger-Themen 3
S Java Client-je nach Heap Size Größe startet Applikation oder nicht Java Basics - Anfänger-Themen 4
D Verbesserungsvorschläge zur Struktur einer Client Server Desktop Chat App Java Basics - Anfänger-Themen 24
D Unerwartetes Verhalten bei Client Server Chat App Java Basics - Anfänger-Themen 12
D Welche GUI Library für eine Client Server Chat App Java Basics - Anfänger-Themen 14
K Verständnisfrage Server/Client BufferedReader, PrintWriter Java Basics - Anfänger-Themen 2
A Client-Server Kommunikation Java Basics - Anfänger-Themen 3
I Client ObjectInputStream error... Java Basics - Anfänger-Themen 5
W Client verbindet sich nicht Java Basics - Anfänger-Themen 14
B Email Client in der eigenen Software einbauen Java Basics - Anfänger-Themen 3
S Server - für jeden Client ein Serverthread Java Basics - Anfänger-Themen 2
E SocketServer/Client stürzt ab. Address already in use. Java Basics - Anfänger-Themen 2
I Wann ist Client plattformunabhängig? Java Basics - Anfänger-Themen 22
E MCLauncher eigener Client workt nicht? Java Basics - Anfänger-Themen 4
L Erste Schritte Erste Versuche mit Server und Client Java Basics - Anfänger-Themen 7
elischa Client-Server IO und Stream Steuerung ? Java Basics - Anfänger-Themen 2
I Print Client -> Server -> Client? Java Basics - Anfänger-Themen 1
I Unique client information in WebApp Java Basics - Anfänger-Themen 3
I lokales Programm mit Client/Server Programm kommunizieren Java Basics - Anfänger-Themen 3
J TCP MultiThreaded Server und Client - irgendwo ist der Fehler, aber ich find ihn nicht Java Basics - Anfänger-Themen 3
Joew0815 Error org.apache.xmlrpc.client.XmlRpcClientConfigImpl.setUserAgent Java Basics - Anfänger-Themen 2
N Was bedeutet "Implementierung vor dem Client verbergen" bei Design Patterns? Java Basics - Anfänger-Themen 2
K Java Client > Python Server Java Basics - Anfänger-Themen 0
O Verriegeln, aber wo? Finde den Client der zu schließem ist. Java Basics - Anfänger-Themen 0
S Java - Client/Server mit Stomp kurze Frage Java Basics - Anfänger-Themen 0
T Buffererwriter keine Exception obwohl Client weg Java Basics - Anfänger-Themen 2
E Client Server Java Basics - Anfänger-Themen 12
H Einfache Client/Server-Kommunikation Java Basics - Anfänger-Themen 16
O Server Client Problem Java Basics - Anfänger-Themen 2
N Client soll mehrere Antworten von Servern gleichzeitig empfangen Java Basics - Anfänger-Themen 8
H Java Server/Client, HTML Seite anzeigen Java Basics - Anfänger-Themen 2
L Server pingt Client und fordert Info Java Basics - Anfänger-Themen 2
T Client-Fenster bei Aufruf unvollständig Java Basics - Anfänger-Themen 12
E Senden von Objects an Client. Variablenwerte kommen nicht an Java Basics - Anfänger-Themen 5
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
E Client hilfe!!! Java Basics - Anfänger-Themen 7
B RMI - Fehlermeldung auf dem Client Java Basics - Anfänger-Themen 6
X Applet - Client/Server Java Basics - Anfänger-Themen 2
E Client ergibt NULL? Java Basics - Anfänger-Themen 24
E Socket (Client) dauerhaft aktiv? Java Basics - Anfänger-Themen 9
E HTTP Client - Login durchführen? Java Basics - Anfänger-Themen 4
L Ip-Adresse für Client Java Basics - Anfänger-Themen 14
L Bild versenden über Client/Server Java Basics - Anfänger-Themen 10
S Klassen Server und Client Java Basics - Anfänger-Themen 3
M Client - DB-Server Struktur Java Basics - Anfänger-Themen 7
L Client aktualisieren Java Basics - Anfänger-Themen 6
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
J DNS-Client Java Basics - Anfänger-Themen 2
J Simpler DNS Client Java Basics - Anfänger-Themen 20
Z Tomcat Server Kommunikation zu Client Applet Java Basics - Anfänger-Themen 5
B Server-Client mit Thread ausstatten Java Basics - Anfänger-Themen 3
D Client-Server Problem Java Basics - Anfänger-Themen 2
J Netzwerkrprogammierung Client - Server Java Basics - Anfänger-Themen 3
J Netzwerkprogrammierung Client/Server Java Basics - Anfänger-Themen 16
G ArrayListe vom Server nach Client schicken Java Basics - Anfänger-Themen 17
M Flexiblen Client programmieren Java Basics - Anfänger-Themen 2
G JMS -> Wie Anmeldung vom Client an Server? Java Basics - Anfänger-Themen 4
S Webservice: Dateien downloaden vom Webserver auf den Client Java Basics - Anfänger-Themen 7
G Ausg. in JSP erzeugen die als Antwort an Client gesch. wird Java Basics - Anfänger-Themen 2
I Server / Client Programm wie einen String übergeben? Java Basics - Anfänger-Themen 6
K Client-Liste im Chat Java Basics - Anfänger-Themen 2
B Client - Server Verbindung über sockets mysql DB ansprechen? Java Basics - Anfänger-Themen 6
G Java Server Client Programmierung Java Basics - Anfänger-Themen 3
B Bild/Datei von einem Server an einen Client senden Java Basics - Anfänger-Themen 6
A Problem mit Ausgabe einer Liste über einen Client Java Basics - Anfänger-Themen 5
rambozola zugriff auf client bei j2ee anwendung Java Basics - Anfänger-Themen 10
G Mail Client öffnen Java Basics - Anfänger-Themen 9
D Server/Client Java Basics - Anfänger-Themen 8
T Datei über UDP verschicken . Speicherprobleme am Client Java Basics - Anfänger-Themen 4
H Server Client, es kommt nichts an. Java Basics - Anfänger-Themen 5
R client-applikation? Java Basics - Anfänger-Themen 5
G [Hilfe] Fileupload: Client-Server Java Basics - Anfänger-Themen 9
S Server/Client Verbindung Java Basics - Anfänger-Themen 2
G Dateidownload Client-Server (jsp) Java Basics - Anfänger-Themen 4
G Zugriff vom 'Server auf Client' Java Basics - Anfänger-Themen 4
S smtp-Client programmieren Java Basics - Anfänger-Themen 9
S Client-Server Java Basics - Anfänger-Themen 18
X client soll bat auf server ansprechen Java Basics - Anfänger-Themen 7
C client/server programm fehler ! Java Basics - Anfänger-Themen 20
F Wie kommen die Applets zum Client? Java Basics - Anfänger-Themen 7
C string über server/client verbindung senden ? Java Basics - Anfänger-Themen 4
T Client-Authentifizierung Java Basics - Anfänger-Themen 6
K [servcer/Client] Suche Server /Client Tutorial. Java Basics - Anfänger-Themen 2
G http client Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben