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

标签 java sockets ssl file-transfer

我正在尝试使用 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 类。

关于java - 在java中通过ssl套接字传输类文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19583035/

相关文章:

java - 无法将字符串转换为 json 对象

sockets - 如何使用 SocketConnection 在 Java ME 中创建 HttpConnection 实现?

ssl - 如果 CSR 中使用的 DNS 名称与要使用的机器挂起关联,有效的 SSL 证书是否会导致证书错误?

python - Python 中的 SSL : Why it doesn't send certificate to server?

java - StringBuilder 和 equals 比较原始字符串和反转字符串

java - 如何将Tab的鼠标点转换为JTabbedPane的点?

java - 以编程方式确定泛型类型

linux - 查找 TCP 连接的瓶颈

.net - 是否可以使用 silverlight 2/3 进行安全套接字(不是 https)?

ssl - 在具有多个网站的 IIS6 上使用 SelfSSL 时,CryptAcquireCertificatePrivateKey 失败