Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中通过ssl套接字传输类文件_Java_Sockets_Ssl_File Transfer - Fatal编程技术网

java中通过ssl套接字传输类文件

java中通过ssl套接字传输类文件,java,sockets,ssl,file-transfer,Java,Sockets,Ssl,File Transfer,我正在尝试使用SSL套接字工厂传输二进制文件 到目前为止,它正确地传输了大部分文件,但收到的文件已损坏 所以我想知道这是编码问题还是其他问题 客户端代码: SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault(); SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(host

我正在尝试使用SSL套接字工厂传输二进制文件

到目前为止,它正确地传输了大部分文件,但收到的文件已损坏

所以我想知道这是编码问题还是其他问题

客户端代码:

         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();
            }
        }

Reader和Writer类传输文本流,可能会损坏二进制数据。请改用InputStream和OutputStream类。

如果要传输二进制数据,为什么要发送字符串?您需要将二进制数据编码为字符串(例如Base64)或发送实际字节。此外,如果您使用readLine,则显然是在读取文本