我在 java 中有以下套接字服务器,
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 循环知道只是坐着等待,然后在从客户端发送消息以读取该消息时触发,一旦读取消息并发送回复,然后闲置直到收到来自客户端的下一条消息?
最佳答案
您可以简单地执行如下操作:
String line;
while ((line = in.readLine()) != null) {
\\Do stuff
}
这应该具有预期的行为。
编辑:
这是我在评论中使用您的代码谈论的完整示例:
package javaapplication12;
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 SocketExample {
private ServerSocket middleman;
private int port = 8080;
private Socket client;
protected void createSocketServer()
{
try
{
while (true){
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));
String line;
while((line = in.readLine()) != null)
{
System.out.println("echo: " + line);
out.println("test");
}
}
}
catch(IOException e)
{
System.out.println(e);
}
}
public static void main(String[] args){
SocketExample test = new SocketExample();
test.createSocketServer();
}
}
关于java - 等待客户端读取消息的套接字服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26470140/