0

SSL Socket Factory を使用してバイナリ ファイルを転送しようとしています。

これまでのところ、ほとんどのファイルは正しく転送されていますが、受信したファイルは破損しています。

それで、エンコーディングの問題なのか、それとも何か他の問題なのか疑問に思っていましたか?

クライアントコード:

         SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
         SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(host, port);

         InputStream inputstream = System.in;
         InputStreamReader inputstreamreader = new InputStreamReader(inputstream);
         BufferedReader fr = new BufferedReader(new FileReader(fileName));

         OutputStream outputstream = sslsocket.getOutputStream();
         OutputStreamWriter outputstreamwriter = new OutputStreamWriter(outputstream);
         BufferedWriter bufferedwriter = new BufferedWriter(outputstreamwriter);

        String string = null;
        bufferedwriter.write("file;" + fileName + '\n');
        while ((string = fr.readLine()) != null) {              
            bufferedwriter.write(string + '\n');
            bufferedwriter.flush();
        }

        bufferedwriter.write("end");
        bufferedwriter.flush();

サーバーコード:

        SSLServerSocketFactory sslserversocketfactory = (SSLServerSocketFactory) SSLServerSocketFactory
                .getDefault();
        SSLServerSocket sslserversocket = (SSLServerSocket) sslserversocketfactory
                .createServerSocket(port);
        SSLSocket sslsocket = (SSLSocket) sslserversocket.accept();

        InputStream inputstream = sslsocket.getInputStream();
        InputStreamReader inputstreamreader = new InputStreamReader(
                inputstream);
        BufferedReader bufferedreader = new BufferedReader(
                inputstreamreader);

        OutputStream outputstream = sslsocket.getOutputStream();
        OutputStreamWriter outputstreamwriter = new OutputStreamWriter(
                outputstream);
        BufferedWriter bufferedwriter = new BufferedWriter(
                outputstreamwriter);

        String string = null;
        boolean file = false;
        FileWriter f = null;
        PrintWriter pw = null;

        while ((string = bufferedreader.readLine()) != null) {
            String[] splitRead = string.split(";");
            if (splitRead[0].trim().equals("[FILE]")) {
                f = new FileWriter(splitRead[1]);
                pw = new PrintWriter(f, true);
                file = true;
            } else if (file) {
                if (splitRead[0].equals("end")) {
                    file = false;
                    pw.close();
                } else {
                    pw.println(string);
                }
            } else {
                System.out.println(string);
                System.out.flush();
            }
        }
4

1 に答える 1

1

Reader クラスと Writer クラスはテキスト ストリームを転送するため、バイナリ データが破損する可能性があります。代わりに、InputStream および OutputStream クラスを使用してください。

于 2013-10-25T07:02:25.550 に答える