java - 无法使用 BufferedReader.readline() 从套接字读取

标签 java sockets

我正在尝试用java开发客户端/服务器通信应用程序。但在最初阶段,我无法使用 BufferedReader.readline() 从套接字的输出流读取数据字符串。我在 google 上搜索了很多,但找不到问题的具体答案。
调试客户端应用程序显示客户端应用程序在 response.readline() 处停止。

服务器:

package myserver;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MyServer {
    public static void main(String[] args) {
        String[] tokens = new String[10];
        int count = 0;
        ServerSocket server = null;
        try {
            server = new ServerSocket(16);
        } catch (IOException ex) {
            Logger.getLogger(OdeskServer.class.getName()).log(Level.SEVERE, null, ex);
        }
        if (server != null) {
            while (true) {
                PrintWriter response;
                BufferedReader command;
                String inCommand;
                try {
                    Socket client = server.accept();
                    System.out.println("Connected!");
                    response = new PrintWriter(client.getOutputStream());
                    command = new BufferedReader(new InputStreamReader(client.getInputStream()));
                    response.print("EHLO\r\n");
                    command.read(); //just to stop the application to start a new iteration
                } catch (IOException ex) {
                    Logger.getLogger(OdeskServer.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }
    }
}

客户:

package myclient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class MyClient {

    public static void main(String[] args) {
        Socket server = null;
        PrintWriter command;
        BufferedReader response;
        BufferedReader Console = new BufferedReader(new InputStreamReader(System.in));
        try {
            server = new Socket("175.107.231.218", 16);
            System.out.println("Connected");
            command = new PrintWriter(server.getOutputStream());
            response = new BufferedReader(new InputStreamReader(server.getInputStream()));
            while (server.isBound()) {
                String input = response.readLine(); //Here is where the communication halts
                System.out.print(input);
            }
        } catch (UnknownHostException ex) {
            Logger.getLogger(OdeskClient.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(OdeskClient.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

关于这个问题有什么想法吗?

最佳答案

您可能需要从服务器调用 response.flush() 以确保套接字不会缓冲您的消息,等待更多的写入一起批处理。

关于java - 无法使用 BufferedReader.readline() 从套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15436415/

相关文章:

c# - 从 StreamSocket 读取时 DataReader 结果被截断

java - 将一个文件从服务器传输到客户端后套接字关闭异常

python - 在python中封装套接字数据的正确方法?

c# - 如何修复 "a connection attempt failed because the connected party did not properly respond after a period of time ..."错误?

java - src 文件夹导致 Eclipse 中的包声明错误

java - 使用缓冲区策略获取图形对象进行绘制

java - Sierra Chart DTC Java 套接字连接空终止符

java - 最大化两个凸包之间的最小距离

java - 如何使用 HTTP/2 over TLS 发送 HTTP 请求? (Java 11 HttpClient)

java - SQLite 搜索查询不适用于双数据类型数据?