0

私は簡単な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();

}

4

2 に答える 2

2

リーダーとライターおよびreadLine()は使用しないでください。すべてのファイルがテキストファイルではなく、すべてのテキストファイルに改行があるわけではありません。ストリームを使用します。

于 2013-03-26T21:55:13.187 に答える
0

クライアント側では、新しく作成されたファイルには、印刷された各行の間に余分な改行が必要だと思います。これにより、ファイルのサイズが大きくなる可能性があります。クライアント側でこの行を置き換えます:

bufferedWriter.write(length + "\n");

bufferedWriter.write(length);
于 2013-03-26T21:43:48.703 に答える