等待来自客户端读取消息的套接字服务器

jgr*_*208 5 java sockets wait java-io

我在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);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

它在从客户端和所有内容中读取的方式上都能正常工作.但是,我希望套接字服务器只在有来自客户端的消息时尝试读取,因为即使没有收到来自客户端的消息,它仍会继续读取,这会输出一堆

echo: null

是否有一些机制缺少a wait()让while循环知道只是坐下等待然后当从客户端发送消息来读取该消息时触发,并且一旦读取该消息并发送回复,然后就坐空闲,直到收到客户端的下一条消息?

Wil*_*lBD 5

您可以简单地执行如下操作:

String line;
while ((line = in.readLine()) != null) {
   \\Do stuff
}
Run Code Online (Sandbox Code Playgroud)

这应该具有预期的行为。

编辑:

这是我使用您的代码在评论中谈论的内容的完整示例:

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();
    }
}
Run Code Online (Sandbox Code Playgroud)