2016-09-24 4 views
0

サーバーからクライアントにメッセージを送信してから、クライアントがメッセージを受信して​​もメッセージを受信しないサーバーはメッセージを送信しません。どうしてか分かりません。私はスレッドでチャットをしたが、最初にすべての、ここにServerClass:Javaチャットが機能していない - クライアントがメッセージを受信しない

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

}

とサーバのためのスレッド:

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

}

そして今、クライアント:

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

}

とクライアントのためのスレッド:

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

}

なぜ、クライアントがメッセージを受信しませんか?

+0

'new ServerSocket(3)':3 - はポート番号です。 0〜1023は既知の「登録済みポート」 –

+0

だから、私はそれを変更しましたが、何も起こらず、クライアントはメッセージを受け取っていません – RageSkilln

答えて

0

4桁のポート番号を使用してください。 '6789'それが役に立たない場合は、問題を完全に理解するのに役立つサーバークラスとクライアントクラスを自分で記述する必要があります。 1クライアント - 1サーバー通信の場合は、hereから簡単な例をお勧めします。複数のクライアント - 1サーバー通信の場合check this out

関連する問題