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

标签 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);
        }
    }

}

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

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/

相关文章:

java - 从整数中删除字符

c - recvmsg() 不支持操作

c# - FTP 下载速度问题 : . NET 套接字编程与使用 FtpWebRequest/Response 对象

android - 关于 "force close/wait"通知

delay - 在 Haxe 中等待()?

c# - 如何等到Timer停止?

java - 为什么 For 循环不终止?

java - 使用 Java 客户端向使用 gdata 的 Google 文档列表 API 发出发布请求。

java - 默认排除 gradle 测试

java - 如何在 Ubuntu 上使用 Mina 增加可用套接字?