[英]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();
}
}
}
客戶為什么沒有收到消息?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.