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:
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: