编写java服务器来处理同时的客户端响应

时间:2015-12-03 01:48:30

标签: java sockets server

我正在组建一个4人多人游戏,我正在使用套接字开发服务器的内核。我目前已将服务器设置为接受多个客户端连接,并在需要写入特定客户端时将其保存到要访问的套接字数组中。

我知道如何处理来自单个客户的单个响应:

String response; while((response = in.readLine()) != null) {//do something}

但是如何管理将同时发送到服务器的两个响应?

3 个答案:

答案 0 :(得分:1)

使用THREAD。这也是文档中的一个例子。另见右侧的相关问题---->

https://docs.oracle.com/javase/tutorial/networking/sockets/clientServer.html

  

支持多个客户

     

为了简化KnockKnockServer示例,我们将其设计为侦听   用于处理单个连接请求。但是,多个客户端   请求可以进入同一个端口,因此也可以进入同一个端口   ServerSocket的。客户端连接请求在端口排队,因此   服务器必须按顺序接受连接。然而   服务器可以通过使用线程一个同时为它们提供服务   每个客户端连接的线程。

     

这种服务器的基本逻辑流程如下:

while (true) {
    accept a connection;
    create a thread to deal with the client;
}
     

线程根据需要读取和写入客户端连接。

答案 1 :(得分:0)

我认为你需要这样的东西:

someMethod() {

    // Your array of sockets
    Socket[] clientSockets;

    // Create a new Thread to handle each socket and start them
    for (int i = 0 ; i < clientSockets.length ; ++i) {
        Thread t = new ListenToClientThread(clientSockets[i]);
        t.start();
    }
}

// When you call start() on a Thread it calls run()
class ListenToClientThread extends Thread {
    private Socket socket;

    ListenToClientThread(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        PrintWriter out =
            new PrintWriter(socket.getOutputStream(), true);
        BufferedReader in = new BufferedReader(
            new InputStreamReader(socket.getInputStream()));

        String response;
        while((response = in.readLine()) != null) {//do something}
    }
}

这里的技巧是以允许所有不同线程访问共享对象的方式处理所有响应,为此你必须阅读所有关于synchronisation的信息并注意......有龙!

答案 2 :(得分:-1)

而不是在单个输入上,循环遍历所有输入并读取它们。

只需实现socketObject.readline()或类似的东西。

//android.widget.TextView[normalize-space(@text) = 'Buy one Big Mac, get one FREE']