我是java服务器和客户端的新手。我想制作一个多客户端服务器。在使服务器代码准备好接受多个客户端后,它是这样的:
服务器代码:
public class Server {
int clientNumber = 1;
ServerSocket mServer = new ServerSocket(9090);
try {
while (true) {
new TheServer(mServer.accept(), clientNumber++).start();
}
} finally {
mServer.close();
}
}
private static class TheServer extends Thread {
private Socket client;
private int clientNumber;
public TheServer(Socket client, int clientNumber) {
this.client = client;
this.clientNumber = clientNumber;
}
public void run() {
try {
DataOutputStream dos = new DataOutputStream(client.getOutputStream());
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
dos.writeUTF(numberString);
while (true) {
String message = br.readLine();
dos.writeUTF(message);
}
} catch (IOException e) { }
}
}
客户端按照我的预期添加到服务器中。
如果我有一个客户端,那么--- dos.writeUTF(消息); ---在客户端控制台中提供所需的结果,所以在服务器控制台中我写下(A)并按回车键,然后在#1客户端内打印(A),然后在服务器控制台中写下(B)并按回车键,然后(B)打印在#1客户端内,看起来不错。
但是如果第二个客户端加入服务器,则两个客户端控制台内的结果将按住一次,并在第二次输入时触发。为了简化:在服务器控制台内部我按(A)然后按回车键,客户端控制台上什么也没发生,然后我再次按下(B)在服务器控制台内,现在打印第一条消息(A)和第二条消息(B) (A)#1客户端内部和#2客户端内部的一个(B),这不是我期望的行为。
我的期望:当存在2个客户端并且服务器发送消息(A)时,我需要所有客户端(这里有2个客户端)一起获取消息。想象一下,你在网上玩游戏,如果我有一个角色(比如一个球),我将它移到游戏区域内,所有其他玩家都必须看到我的角色在移动。我希望我很清楚。
我想我必须创建一个数组来保持客户端并向该数组发送消息...
那我怎么解决呢如果需要客户端代码,请告诉我。
答案 0 :(得分:0)
查看名为“发布 - 订阅”模式的内容,也称为“观察者”模式,这是一个示例:
https://www.journaldev.com/1739/observer-design-pattern-in-java