2016-09-24 1 views
0

Also ich möchte der Server den Client eine Nachricht senden, und dann der Client etwas tun, wenn der Client die Nachricht erhält, aber der Client die Nachricht nicht erhalten oder Der Server sendet die Nachricht nicht. Ich weiß nicht warum. Ich habe die Chats in Threads, aber vor allem hier die Serverclass:Java-Chat funktioniert nicht - Client erhält keine Nachricht

public class CommandServer { 

private ServerSocket server; 
private Socket client; 
private PrintWriter writer; 
private BufferedReader reader; 
public static List<Gamemode> cache = new LinkedList<>(); 

public CommandServer() {} 

public void start(){ 
    try{ 
     server = new ServerSocket(3); 
     System.out.println(Master.prefix + "Commander started!"); 

     client = server.accept(); 
     System.out.println(Master.prefix + "Watcher accepted!"); 

     writer = new PrintWriter(client.getOutputStream()); 
     reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 

     client.setKeepAlive(true); 

     Thread thread = new Thread(new Threader(reader)); 
     thread.start(); 

     startNew(Gamemode.BEISPIEL); 
     System.out.print(Master.prefix + "Send StartCommand!"); 
    }catch(Exception ex){ 

    } 
} 

public void startNew(Gamemode gm){ 
    cache.add(gm); 
    writer.write("STARTNEW => " + gm.toString()); 
    writer.flush(); 
} 

}

Und der Thread für den Server:

public class Threader implements Runnable{ 

private BufferedReader reader; 

public Threader(BufferedReader reader) { 
    this.reader = reader; 
} 

@Override 
public void run() { 
    while(true){ 
     String s = null; 
     try { 
      while((s = reader.readLine()) != null){ 
       if(s.startsWith("STARTED")){ 
        String uuid = s.split(" => ")[1]; 
        if(Master.register.getRegisterStatus(UUID.fromString(uuid)) == RegisterStatus.NEW){ 
         if(CommandServer.cache.contains(Master.register.getGamemode(UUID.fromString(uuid)))){ 
          CommandServer.cache.remove(Master.register.getGamemode(UUID.fromString(uuid))); 
          Master.register.setRegistered(UUID.fromString(uuid)); 
          Master.servers.add(Master.register.getGamemode(UUID.fromString(uuid)), Master.register.getPort(UUID.fromString(uuid))); 
         } 
        } 
       } 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

}

Und nun die Kunde:

public class Watcher { 

private Socket client; 
private PrintWriter writer; 
private BufferedReader reader; 
public static List<Thread> runningServers = new LinkedList<>(); 

public Watcher() {} 

public void start(){ 
    try { 
     client = new Socket("localhost", 3); 
     System.out.println(Daemon.prefix + "Watcher started and connected!"); 
     writer = new PrintWriter(client.getOutputStream()); 
     reader = new BufferedReader(new InputStreamReader(client.getInputStream())); 

     client.setKeepAlive(true); 

     Thread thread = new Thread(new Threader(reader)); 
     thread.start(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

public void started(String uuid){ 
    writer.write("STARTED => " + uuid); 
    writer.flush(); 
} 

}

und das Gewinde für den Auftraggeber:

public class Threader implements Runnable{ 

private BufferedReader reader; 

public Threader(BufferedReader reader) { 
    this.reader = reader; 
} 

@Override 
public void run() { 
    try { 
     boolean b = true; 
     while (b == true) { 
      String s = null; 
      while ((s = reader.readLine()) != null) { 
       if(s.startsWith("STARTNEW")){ 
        System.out.println(Daemon.prefix + "Recieved!"); 
        Gamemode gm = Gamemode.valueOf(s.split(" => ")[1]); 
        ThreadHandler handler = new ThreadHandler(gm); 
        Thread thread = new Thread(handler); 
        thread.start(); 
        Watcher.runningServers.add(thread); 
       } 
      } 
     } 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

}

Warum nicht der Kunde erhalten Sie die Nachricht?

+0

'neue ServerSocket (3)': 3 - ist die Portnummer. Also mindestens, es muss größer als 1024 sein. Weil 0 - 1023 sind wie bekannte "registrierte Ports" –

+0

Ok, ich habe es geändert, aber nichts passiert, der Client erhält keine Nachricht – RageSkilln

Antwort

0

Versuchen Sie es mit der 4-stelligen Portnummer, z. "6789". Wenn es nicht hilft, sollten Sie selbst Server- und Client-Klassen schreiben, um das Problem besser zu verstehen. Für 1 Client - 1 Server Kommunikation empfehle ich ein einfaches Beispiel von here. Für mehrere Clients - 1 Serverkommunikation check this out.

Verwandte Themen