我有一个Java套接字服务器,如下所示:
它在从客户端读取内容等方面的工作是正确的。然而,我希望套接字服务器仅在有来自客户端的消息时尝试读取,因为在循环中即使未收到客户端的消息,它也会继续读取,这会输出一堆
echo: null
请问除了wait()之外是否有其他机制可以让while循环知道仅需坐等并在收到客户端发来的消息后触发以读取该消息。一旦读取该消息并发送回复,则会闲置等待接收下一个消息吗?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class MiddleSocket {
private ServerSocket middleman;
private int port = 1027;
private Socket client;
protected void createSocketServer()
{
try
{
middleman = new ServerSocket(port);
client = middleman.accept();
middleman.close();
PrintWriter out = new PrintWriter(client.getOutputStream(),true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
while(true)
{
System.out.println("echo: " + in.readLine());
out.println("test");
}
}
catch(IOException e)
{
System.out.println(e);
}
}
}
它在从客户端读取内容等方面的工作是正确的。然而,我希望套接字服务器仅在有来自客户端的消息时尝试读取,因为在循环中即使未收到客户端的消息,它也会继续读取,这会输出一堆
echo: null
请问除了wait()之外是否有其他机制可以让while循环知道仅需坐等并在收到客户端发来的消息后触发以读取该消息。一旦读取该消息并发送回复,则会闲置等待接收下一个消息吗?
.accept
命令上进行循环,该命令应处理来自连接客户端的任何输入,然后关闭连接并等待新连接。我将使用示例修改我的答案。 - WillBD