FTPSClient does not behave properly after issuing CCC (Clear Command Channel). Proper behaviour is to close SSLSocket, but keep underlying connection without SSL open.
To achieve this, the SSLSocket should be created with "false", like this on line 255 (of FTPSClient v2.2)
SSLSocket socket =
(SSLSocket) ssf.createSocket(socket, ip, port, false);
Furthermore, on sendCommand CCC, sslSocket must be closed before setting _socket = _plainsocket on line 493:
_socket = _plainsocket;
And finally, it is wrong to set socket factory to null on line 500 of the same method; this is set properly in exexPROT and should not be reset on CCC.