我正在尝试创建一个套接字编程应用程序,该应用程序基于从客户端到服务器的输入,将数学表达式的求值返回给客户端。它应该服务,这意味着如果有一个客户端在服务,而另一个客户端想要连接则应该排队。客户端完成后(类型退出),它将接下一个客户端并为其提供服务。我真的很想尝试为其他客户端提供服务,因为当第一个客户端完成连接就重置了,而第二个客户端从未断开。
根据我所看到的,第二个客户端已连接并处于积压状态(默认情况下为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) {
}
}
}
答案 0 :(得分:-1)
我不会使用第二个while循环。似乎您并不需要它,正如它所说的while(true),该循环不会停止并且另一个循环无法继续进行,因此另一个客户端无法被接受