java - 客户端从服务器读取太多字节?

标签 java sockets ftp

我正在编写一个简单的 FTP 客户端/服务器设置。客户端应该能够从服务器检索文件并将结果作为字节流放入/retr_files/filex 中。从服务器发送适当的响应,并且 file1 确实在文件夹中创建。但是,发送(或接收)的字节过多。我在 9.6kB 文件上对此进行了测试,它在客户端生成的文件为 16.6kB。奇怪的。我觉得我在这里遗漏了一些明显的东西,有人可以帮助我吗? 谢谢!

相关代码:

客户:

BufferedReader inFromServer_d = null;

    if(welcomeSocket!=null){
        if(!welcomeSocket.isClosed()){
            welcomeSocket.close();
        }
    }

    try {
        welcomeSocket = new ServerSocket(port);
        System.out.print("PORT " + myIP + "," + num1 + "," + num2 + "\r\n");
        out.writeBytes("PORT " + myIP + "," + num1 + "," + num2 + "\r\n");
        System.out.print(parseReply(getResponse()));
        System.out.print("RETR " + pathname + "\r\n");
        out.writeBytes("RETR " + pathname + "\r\n");
        String reply = parseReply(getResponse());
        if (reply.charAt(10)=='1') {
            System.out.print(reply);
            System.out.print(parseReply(getResponse()));

            try{
                clientSocket_d = welcomeSocket.accept();
            } catch (IOException e) {
                System.out.print("GET failed, FTP-data port not allocated.\r\n");
                System.exit(-1);
            }


                inFromServer_d = new BufferedReader(new InputStreamReader(
                        clientSocket_d.getInputStream()));


            // READ
            BufferedReader bufferedReader = inFromServer_d;
            FileWriter output = new FileWriter("retr_files/file" + retrCnt);
            BufferedWriter bufferedWriter = new BufferedWriter(output);

            String length;
            while ((length = bufferedReader.readLine()) != null) {
                bufferedWriter.write(length + "\n");
            }

            bufferedReader.close();
            bufferedWriter.close();
            clientSocket_d.close();

服务器:

//TCP CONNECT
                        DataOutputStream outToClient_d = null;
                        Socket clientSocket1 = null;


                        try {
                            ipAddress = ipAddress.substring(0, ipAddress.length()-1);
                        clientSocket1 = new Socket(ipAddress, portNumber);
                        outToClient_d = new DataOutputStream(clientSocket1.getOutputStream());
                        }

                        catch(UnknownHostException e){
                          out.writeBytes("425 Can not open data connection.\r\n");
                        }



                        BufferedReader bufferedReader = new BufferedReader(input);

                        String length;
                        while((length = bufferedReader.readLine())!=null){
                            outToClient_d.writeBytes(length+"\n");
                        }
                        out.writeBytes("250 Requested file action completed.\r\n");
                        bufferedReader.close();
                        clientSocket1.close();
                        outToClient_d.close();

}

最佳答案

不要使用 Readers 和 Writers 以及 readLine()。并非所有文件都不是文本文件,也并非所有文本文件都有换行符。使用流。

关于java - 客户端从服务器读取太多字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647754/

相关文章:

java - 从 FTP 下载文件

java - Spring Integration 使用出站网关递归获取 FTP 文件

Java 套接字 - 丢失字节和 100% 处理器功耗

python - 从 FTP 服务器上的 ZIP 存档中读取文件而不下载到本地系统

java - 骰子公式评估器

java - 在java中使用1个循环查找二维数组的行总和

java - 从java中的gradle.properties访问属性?

java - 如何在创建 jar 文件时包含库文件

c - 两种方式的套接字通信

java - 当我尝试发送请求时出现未知主机异常