java - 客户端无法从服务器接收信息

标签 java sockets stream serversocket

我正在尝试将文件信息从服务器发送到客户端,但无法在客户端接收到信息。我认为这是流的错误,但找不到它。

我调试了代码,我看到信息读起来很好,但是当到达该行时发生了一些不好的事情:

while ((readLine = read.readLine()) != null) {

它是null,一切都结束了。

public class Server {
    private String urlFile = "http://riemann.fmi.uni-ofia.bg/vladov/students/boil.txt";
    private ServerSocket serverSocket = null;
    private BufferedReader read = null;
    private BufferedWriter write = null;
    private FileReader fileReader = null;
    URLConnection urlConnection = null;

    void acceptConnection() {
        try {
            serverSocket = new ServerSocket(3000);
            Socket client = null;
            while (true) {
                client = serverSocket.accept();
                handleConnection(client);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void handleConnection(Socket clientSocket) {
        try {
            URL url = new URL(urlFile);
            urlConnection = url.openConnection();
            read = new BufferedReader(new InputStreamReader(
                    urlConnection.getInputStream()));

            write = new BufferedWriter(new OutputStreamWriter(
                    clientSocket.getOutputStream()));
            String readLine = null;
            while ((readLine = read.readLine()) != null) {
                write.write(readLine);
                write.flush();
            }

        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    private void tearDownConnection() {
        try {
            write.close();
            read.close();
            serverSocket.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

客户:

 public class Client {
    Socket client = null;
    BufferedReader reader = null;
    BufferedWriter writer = null;

    void connectToServer(String hostAddress, int port) {
        try {
            System.out.println("Client is waitting.");
            client = new Socket(hostAddress, port);
            reader = new BufferedReader(new InputStreamReader(
                    client.getInputStream()));
            writer = new BufferedWriter(new OutputStreamWriter(
                    client.getOutputStream()));
            String readedLine = null;
            readedLine = reader.toString();
            while ((readedLine = reader.readLine()) != null) {
                System.out.println(readedLine);
            }

        } catch (UnknownHostException e) {
            System.out.println("Host name is unkown.");
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    void tearDownConnection() {
        try {
            if (client != null) {
                client.close();
            }
            if (writer != null) {
                writer.close();
            }
            if (reader != null) {
                reader.close();
            }

        } catch (IOException e) {
            e.printStackTrace();
        }

    }
}

最佳答案

客户端正在等待一行(即由返回/换行符终止)而服务器没有发送它。您可以在服务器中自己添加换行符:

while ((readLine = read.readLine()) != null) {
  write.write(readLine+"\n");
  write.flush();
}

关于java - 客户端无法从服务器接收信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13894613/

相关文章:

java - 正则表达式匹配电子邮件主题中的 base64 编码

java - 将 Spring 应用程序(JAR)打包到 Spring Boot 应用程序中

c# - Socket.ReceiveAsync 和 SslStream

.net - 将 blob 存储在 SQL Server 中而不将 blob 读入内存

java - Android TimeoutException 连接到maps.googleapis.com

java - 在android中使用arrayadapter类自定义listview

c - Linux 原始套接字缓冲区大小是否有 256 K 的上限?

c - 子域和套接字

c++ - 检查 ofstream 是否为空?

file - ffmpeg:哪些文件格式支持标准输入使用?