簡體   English   中英

Java聊天無法正常工作-客戶端未收到消息

[英]Java Chat not working - Client does not receive the message

因此,我希望服務器向客戶端發送一條消息,然后在客戶端收到消息時客戶端執行某些操作,但客戶端未收到消息或服務器未發送消息。 我不知道為什么 我在線程中進行了聊天,但首先是ServerClass:

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

}

客戶為什么沒有收到消息?

嘗試使用4位數字的端口號,例如'6789'。 如果沒有幫助,您應該自己編寫Server和Client類,這將幫助您完全理解問題。 對於1客戶端1服務器通信,我從這里推薦一個簡單的示例。 對於多客戶端1服務器通信, 請檢查此內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM