Client-Server IO und Stream Steuerung ?

elischa

Mitglied
Hallo,
ich versuche Connections von Clients in Threads durch den Server abzuarbeiten, jedoch kann ich den Request nicht richtig auslesen und einen Moment später diesem Client drauf antworten.
Ich möchte quasi einen Client mit http://127.0.0.1:54321 startet und der horchende Server soll für diesen neuen Socket einen Thread ausführen, wo er ließt und schreibt und danach diesen Thread beendet. Also einfaches Beispiel für Request und Response mit Anzeige.
Wie steuere ich wann ein Stream leer ist, sodass geantwortet werden kann und wie und wo stoppe ich die Threads, Sockets oder Streams. Würde mich über ein paar Tips freuen, thx. Folgenden Code hab ich bisher:
Java:
package pack123;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerT extends Thread {

   private ServerT serverThread = null;
   private ServerSocket ss = null;
   private Socket s = null;

   private ConT conT = null;

   public ServerT() throws IOException {
     serverThread = this;
     ss = new ServerSocket(54321);
   }

   public ServerT getServerThread() {
     return serverThread;
   }

   public void execServerThread() {
     serverThread.start();
   }

   public void stopServerThread() {
     serverThread = null;
   }

   @Override
   public void run() {
     System.out.println( "Server on: "+ss.getLocalPort() );
     long i = System.currentTimeMillis();

     while(serverThread != null) {
       try {
         s = ss.accept();
       } catch (IOException e) {
         e.printStackTrace();
       }
       conT = new ConT(s);
       conT.exec();
     }
     System.out.println(System.currentTimeMillis()-i);
   }
}

Java:
package pack123;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class ConT implements Runnable {
   private Runnable r = null;
   private Socket s = null;
   private Thread t = null;

   private PrintWriter pw = null;

   private BufferedReader br = null;
   private InputStream is = null;
   private InputStreamReader isr = null;

   public ConT(Socket so) {
     r = this;
     s = so;
     t = new Thread(r);
   }

   public void exec() {
     t.start();
   }

   @Override
   public void run() {
     System.out.println( "Client: "+s.getPort() );
     try {
       pw = new PrintWriter(s.getOutputStream());
       pw.println(new java.util.Date());

       pw.println("########################");
       pw.flush();

       String string01 = "";
       is = s.getInputStream();
       isr = new InputStreamReader(is);
       br = new BufferedReader(isr);
       while( (string01 = br.readLine()) != null) {
         System.out.println(string01);
       }

       pw.println("ende.");

       br.close();
       pw.close();
       s.close();
     } catch (IOException e) {
       e.printStackTrace();
     }
     t = null;
   }
}

Java:
package pack123;

import java.io.IOException;

public class RunnerMAIN { 
  public static void main(String[] args) throws IOException { 
  ServerT st = new ServerT();
  st.execServerThread(); 
  }
}
 
Zuletzt bearbeitet von einem Moderator:

fhoffmann

Top Contributor
Hallo,

Client und Server müssen sich auf ein "Protokoll" für Nachrichten einigen.
Eine Möglichkeit wäre, dass immer in den ersten 6 Zeichen die Länge der Nachricht angegeben wird, also beispielsweise:
000023Dies ist eine Nachricht
Die andere Möglichkeit ist, dass jede Nachricht mit einem festgelegten Begriff endet (der hoffentlich sonst nicht vorkommt), also beispielsweise:
Dies ist eine NachrichtE_N_D

Wenn der Client den Socket schließt, erhält der Server eine IOException (in readLine()). Dann kann er alles sauber schließen.

Unschön finde ich deine Variable
private ConT conT = null;
Diese wird in der while-Schleife mit immer überschrieben. Schöner wäre es, wenn sich der Server in einer Liste alle Clients (Instanzen von ConT) merkt.

Gruß
Fritz
 

elischa

Mitglied
ahh wunderbar thx, hab jetzt die folgende Leerzeile als Abbruchbedingung im Lesestrom hinzugefügt und dann kann man drauf Schreiben:
Java:
if (string01.equalsIgnoreCase(""))
  break;

Die ThreadInstanzen in eine Liste, bin ich noch einbischen am basteln.
 
Ä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
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
S Server - für jeden Client ein Serverthread Java Basics - Anfänger-Themen 2
L Erste Schritte Erste Versuche mit Server und Client Java Basics - Anfänger-Themen 7
I Print Client -> Server -> Client? Java Basics - Anfänger-Themen 1
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
K Java Client > Python Server Java Basics - Anfänger-Themen 0
S Java - Client/Server mit Stomp kurze Frage Java Basics - Anfänger-Themen 0
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
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
R Server/Client für Spiel Java Basics - Anfänger-Themen 2
X Applet - Client/Server Java Basics - Anfänger-Themen 2
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
U Probleme mit Server-Client implementierung Java Basics - Anfänger-Themen 5
G Server-Client Kommunikation Java Basics - Anfänger-Themen 3
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
G JMS -> Wie Anmeldung vom Client an Server? Java Basics - Anfänger-Themen 4
I Server / Client Programm wie einen String übergeben? Java Basics - Anfänger-Themen 6
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
D Server/Client Java Basics - Anfänger-Themen 8
H Server Client, es kommt nichts an. 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 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
C string über server/client verbindung senden ? Java Basics - Anfänger-Themen 4
K [servcer/Client] Suche Server /Client Tutorial. Java Basics - Anfänger-Themen 2
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
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
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
I Unique client information in WebApp 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
O Verriegeln, aber wo? Finde den Client der zu schließem ist. Java Basics - Anfänger-Themen 0
T Buffererwriter keine Exception obwohl Client weg Java Basics - Anfänger-Themen 2
N Client soll mehrere Antworten von Servern gleichzeitig empfangen Java Basics - Anfänger-Themen 8
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
E Client hilfe!!! Java Basics - Anfänger-Themen 7
B RMI - Fehlermeldung auf dem Client Java Basics - Anfänger-Themen 6
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 Wegwerf Client Java Basics - Anfänger-Themen 26
L Client aktualisieren Java Basics - Anfänger-Themen 6
J DNS-Client Java Basics - Anfänger-Themen 2
J Simpler DNS Client Java Basics - Anfänger-Themen 20
M Flexiblen Client programmieren Java Basics - Anfänger-Themen 2
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
K Client-Liste im Chat Java Basics - Anfänger-Themen 2
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
T Datei über UDP verschicken . Speicherprobleme am Client Java Basics - Anfänger-Themen 4
R client-applikation? Java Basics - Anfänger-Themen 5
S smtp-Client programmieren Java Basics - Anfänger-Themen 9
F Wie kommen die Applets zum Client? Java Basics - Anfänger-Themen 7
T Client-Authentifizierung Java Basics - Anfänger-Themen 6
G http client Java Basics - Anfänger-Themen 4
FireHorses Benutzernamen aus PrivateChannel(Interaction) auf Server bringen Java Basics - Anfänger-Themen 0
HolyFUT Best Practice Architektur WebSocket Server Java Basics - Anfänger-Themen 1
S Server Java Basics - Anfänger-Themen 4
S Server Java Basics - Anfänger-Themen 3
M CS GO Server mit Java steuern Java Basics - Anfänger-Themen 3
C Was ist nötig für ein Java-Programm auf Server für Website Java Basics - Anfänger-Themen 18
B DHCP-Server Adresse ermitteln Java Basics - Anfänger-Themen 4
F Mehrere Server Sockets in einer Anwendung Java Basics - Anfänger-Themen 9
R Antwort vom Server an mehreren Clients senden Java Basics - Anfänger-Themen 3
W Netwerkprogrammierung und Http Server Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben