设置服务器分别为每个客户端监听从(服务器/客户端)到(服务器/客户端)的发送消息

时间:2016-05-01 07:58:56

标签: java server client communication bidirectional

尝试编写 - 分布式仿真框架,其中程序由带有移动对象的数组表示,服务器发送命令移动,客户端回答数组中的对象

目标 - 服务器单独向每个连接的客户端发送文本消息       - 客户回答

问题 - 无法找到如何实现服务器侦听和写入一个选定客户端的方法

请问有谁可以帮助我或获得一些想法?

private ServerSocket serverSocket;

private ArrayList<BufferedReader> clientBufReaders;
private ArrayList<BufferedWriter> clientBufWriters;

public static void main(String[] args) {
    Server server = new Server();
}

public Server() {
    try {
        this.serverSocket = new ServerSocket(23456);
        this.clientBufReaders = new ArrayList<BufferedReader>();
        this.clientBufWriters = new ArrayList<BufferedWriter>();
        this.clients();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private void clients() {

    Thread acceptThread = new Thread(new Runnable() {
        private Scanner in;

        public void run() {

            while (true) {
                try {
                    Socket clientSocket = serverSocket.accept();
                    clientBufReaders.add(new BufferedReader(new InputStreamReader(clientSocket.getInputStream())));

                    clientBufWriters.add(new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())));

                    this.in = new Scanner(System.in);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    );
    acceptThread.start();

    while (true) {
        synchronized (clientBufReaders) {
            for (BufferedReader in : clientBufReaders) {
                try {
                    if (in.ready()) {
                        System.out.println(in.readLine());
                    } else {
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }


    }

}

0 个答案:

没有答案