如何在不使用任何线程的情况下将客户端排队并一次为其服务?

时间:2019-04-27 22:27:16

标签: java

我正在尝试创建一个套接字编程应用程序,该应用程序基于从客户端到服务器的输入,将数学表达式的求值返回给客户端。它应该服务,这意味着如果有一个客户端在服务,而另一个客户端想要连接则应该排队。客户端完成后(类型退出),它将接下一个客户端并为其提供服务。我真的很想尝试为其他客户端提供服务,因为当第一个客户端完成连接就重置了,而第二个客户端从未断开。

根据我所看到的,第二个客户端已连接并处于积压状态(默认情况下为50),因此我试图找出如何选择并服务该客户端的方法。我粘贴了部分服务器代码,我认为这是罪魁祸首。我避免完全使用线程来完成此任务。

import java.net.*;
import java.io.*;

public class TCPMathServerPersistent {
    private static int PORT = 5000;

    public static void main(String[] args) {
        try {
            @SuppressWarnings("resource")
            ServerSocket server = new ServerSocket(PORT);                                         
            System.out.println("This is the TCP Server.");

            while (true) {
                Socket connectionSocket = server.accept();
                System.out.println("Client accepted.");
                DataInputStream in = new DataInputStream(connectionSocket.getInputStream());
                DataOutputStream out = new DataOutputStream(connectionSocket.getOutputStream());

                while (true) {
                    String line = in.readUTF();
                    String newLine = Double.toString(eval(line));
                    out.writeUTF(newLine);
                    out.flush();  // flushed the output stream and forces any buffered output bytes to be written out (done to improve performance)
                }   
            }
        }
        catch(IOException e) {                                         
        }   
    }
}

1 个答案:

答案 0 :(得分:-1)

我不会使用第二个while循环。似乎您并不需要它,正如它所说的while(true),该循环不会停止并且另一个循环无法继续进行,因此另一个客户端无法被接受