2017-10-03 7 views
1

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(); 
} 
} 

Antwort

0

Sie müssen start() nicht überschreiben, Sie müssen run()

überschreiben 0

Server-Thread:

@Override 
public void run(){ 
    try{ 
     ServerSocket ss = new ServerSocket(port); 
     while(true){ 
      Socket cl = ss.accept(); 
      new ClientThread(cl).start(); 
     } 
    }catch(Exception e){} 
} 
+0

Oh, danke. Aber es löst mein Problem nicht. :( – SummerFlower

+0

accept() muss Server-Thread aufrufen. –

+0

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

Verwandte Themen