通过FTPS协议将文件发送到服务器

时间:2019-06-12 13:47:15

标签: java android ftps

我正在创建一个可生成CSV文件和一些PDF的应用。我希望我的应用通过FTPS协议将这些文件发送到服务器。

我正在使用Apache Commons Net FTP库,并且当我未选中“使用PORT P时要求对数据连接进行TLS会话恢复”未选中时,它可以正常工作,但是由于启用了它,所以无法发送文件。 出现错误: 450 TLS session of data connection has not resumed or the session does not match the control connection

在此站点上进行了一些研究之后,我已覆盖_prepareDataSocket_以解决此问题,但现在它仅在服务器上创建了空文件。

有我的替代功能:

@Override
    protected void _prepareDataSocket_(final Socket socket) throws IOException {
        if (socket instanceof SSLSocket) {
            // Control socket is SSL
            final SSLSession session = ((SSLSocket) _socket_).getSession();
            if (session.isValid()) {
                final SSLSessionContext context = session.getSessionContext();
                try {
                    final Field sessionHostPortCache = context.getClass().getDeclaredField("sessionHostPortCache");
                    sessionHostPortCache.setAccessible(true);
                    final Object cache = sessionHostPortCache.get(context);
                    final Method method = cache.getClass().getDeclaredMethod("put", Object.class, Object.class);
                    method.setAccessible(true);
                    method.invoke(cache, String
                            .format("%s:%s", socket.getInetAddress().getHostName(), String.valueOf(socket.getPort()))
                            .toLowerCase(Locale.ROOT), session);
                    method.invoke(cache, String
                            .format("%s:%s", socket.getInetAddress().getHostAddress(), String.valueOf(socket.getPort()))
                            .toLowerCase(Locale.ROOT), session);
                } catch (NoSuchFieldException e) {
                    throw new IOException(e);
                } catch (Exception e) {
                    throw new IOException(e);
                }
            } else {
                throw new IOException("Invalid SSL Session");
            }
        }
    }

,这是FileZilla Server显示的内容: FileZilla Response

1 个答案:

答案 0 :(得分:0)