首页 文章

Java服务器同时处理多个客户端

提问于
浏览
0

我是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个客户端)一起获取消息 . 想象一下,你在网上玩游戏,如果我有一个角色(比如一个球),我将它移到游戏区域内,所有其他玩家都必须看到我的角色在移动 . 我希望我很清楚 .

我想我必须创建一个数组来保持客户端并向该数组发送消息...

那我怎么解决呢如果需要客户端代码,请告诉我 .

1 回答

相关问题