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();
}
}
}
なぜ、クライアントがメッセージを受信しませんか?
'new ServerSocket(3)':3 - はポート番号です。 0〜1023は既知の「登録済みポート」 –
だから、私はそれを変更しましたが、何も起こらず、クライアントはメッセージを受け取っていません – RageSkilln