首页 > 解决方案 > 如何在不使用任何线程的情况下将客户端排队并一次提供一个服务?

问题描述

我正在尝试创建一个套接字编程应用程序,该应用程序根据从客户端到服务器的输入将数学表达式的评估返回给客户端。它应该服务,这意味着如果有一个客户端正在服务并且另一个客户端想要连接它应该排队。客户端完成(类型退出)后,它会选择下一个客户端并为他们服务。我真的坚持尝试为另一个客户端提供服务,因为当第一个客户端完成时,连接只是重置并且第二个客户端永远不会被切断。

从我所看到的第二个客户端已连接并且在积压中(默认情况下为 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) {                                         
        }   
    }
}

标签: java

解决方案


我不会使用第二个 while 循环。似乎你不需要它,正如它所说的那样,while(true) 循环不会停止,另一个循环不能继续,所以不能接受另一个客户端


推荐阅读