Ich habe ein Programm geschrieben, das eine einfache Server-Client Verbindung und Kommunikation implementiert, aber es funktioniert nur mit einem Client. Wenn ich einen zweiten Client starte, tut es nichts, aber gibt "Out: 0" als Ausgabe aus. (Der Server reagiert nicht darauf)Java - Server bedient mehrere Clients gleichzeitig
Ich verwende Threads in meinem Server, aber ich kann nicht herausfinden, warum diese Lösung nicht funktioniert.
Irgendeine Idee?
(Ich weiß, dass die leere catch-es nicht schön sind, aber es ist nur ein Beispiel-Code.)
Server.java:
public class Server implements Runnable {
final int port;
public Server(int port){
this.port=port;
}
@Override
public void run(){
while(true){
try{
ServerSocket ss = new ServerSocket(port);
new ClientThread(ss).start();
}catch(Exception e){}
}
}
public static void main(String[] args){
new Server(1995).run();
}
private class ClientThread extends Thread{
Socket s;
Scanner sc;
PrintWriter pw;
ClientThread(ServerSocket ss){
try{
this.s = ss.accept();
}catch(Exception e){}
}
@Override
public void start(){
try{
String in,out;
sc = new Scanner(s.getInputStream());
pw = new PrintWriter(s.getOutputStream(), true);
int i=0;
do{
in = sc.nextLine();
System.out.println("In: " + in);
int tmp = Integer.parseInt(in)+1;
out = Integer.toString(tmp);
pw.println(out);
i++;
}while(i<10);
}catch(Exception e){}
}
}
}
Client.java:
public class Client implements Runnable{
String host;
int port;
Socket s;
Scanner sc;
PrintWriter pw;
public Client(String host, int port){
this.host=host;
this.port=port;
}
@Override
public void run(){
try{
s = new Socket(host, port);
sc = new Scanner(s.getInputStream());
pw = new PrintWriter(s.getOutputStream(), true);
String in, out;
out="0";
int i=0;
do{
pw.println(out);
System.out.println("Out: " + out);
in = sc.nextLine();
int tmp = Integer.parseInt(in)+1;
out=Integer.toString(tmp);
}while(i<10);
}catch(Exception e){}
}
public static void main(String[] args){
new Client("localhost", 1995).run();
}
}
Oh, danke. Aber es löst mein Problem nicht. :( – SummerFlower
accept() muss Server-Thread aufrufen. –
Es ist okay, ich habe es bei meinem Code verbessert, aber es funktioniert nur mit einem Client. Wenn der erste Client fertig ist, ist es Aufgabe, ich kann eine zweite starten, aber wenn Das erste funktioniert, das zweite tut nichts außer "Out: 0". – SummerFlower