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) {
}
}
}
解决方案
我不会使用第二个 while 循环。似乎你不需要它,正如它所说的那样,while(true) 循环不会停止,另一个循环不能继续,所以不能接受另一个客户端
推荐阅读
- python - 如何用python中另一行的值填充某行
- c# - C# 内存不足从 Dynamics 365 检索实体详细信息
- javascript - jquery 将相同的类与选择中的选项混淆
- python - 在 ResNet50 TFLIte 模型中使用修改后的权重执行卷积和激活
- oracle - 交互式报告过滤器文本未在 Oracle APEX 应用程序翻译中进行翻译
- excel - 共同创作时 Excel Power Query 刷新 - 无法合并更改
- javascript - 如何设置表格单元格的宽度,包括边框、边距和填充?
- html - 如何在没有文字装饰的情况下在悬停时制作带下划线的链接
- sql - 使用从 PostgreSQL 中现有列派生的值填充今天的日期作为列名
- javascript - 在 javascript [Node JS] 中以 json 格式访问 http 请求