2016-09-24 2 views
0

서버가 클라이언트에게 메시지를 보내고 클라이언트가 메시지를 받지만 클라이언트가 메시지를받지 못하거나 서버는 메시지를 보내지 않습니다. 나는 이유를 모른다. 나는 스레드에서 채팅을 만들었지 만, 무엇보다도 먼저, 여기에 ServerClass가 : 지금Java 채팅이 작동하지 않습니다. - 클라이언트가 메시지를받지 못합니다.

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

'새 ServerSocket (3)': 3 - 포트 번호입니다. 그래서 적어도 1024보다 커야합니다. 0 - 1023은 알려진 '등록 된 포트'입니다. –

+0

그래, 변경했는데 아무 일도 일어나지 않으면 클라이언트가 메시지를받지 못합니다. – RageSkilln

답변

0

4 자리 포트 번호를 사용해보십시오. '6789'. 도움이되지 않으면 서버 및 클라이언트 클래스를 직접 작성하여 문제를 완전히 이해하는 데 도움이됩니다. 1 클라이언트 - 1 서버 통신에 대해서는 here에서 간단한 예제를 추천합니다. 복수 클라이언트 - 1 서버 통신의 경우 check this out.

관련 문제