Jadi, teori setetes
FTP (File Transfer Protocol) adalah protokol transfer file jaringan.
FTP membutuhkan dua: server FTP dan klien FTP.
Server menyediakan akses dengan login dan kata sandi ke file yang diperlukan dan, oleh karena itu, menampilkan kepada pengguna hanya file dan folder yang dia akses.
Klien adalah program untuk koneksi FTP. Ide utamanya adalah bahwa pengguna dapat mengoperasikan data file di sisi server: melihat, mengedit, menyalin, mengunduh, dan menghapus.
Semuanya logis.
Tidak seperti, katakanlah, HTTP yang sama, FTP menggunakan koneksi ganda sebagai model koneksi. Dalam hal ini, satu saluran adalah saluran kontrol, yang melaluinya perintah diterima ke server dan tanggapannya dikembalikan (biasanya melalui TCP port 21), dan selebihnya transfer data yang sebenarnya terjadi, satu saluran untuk setiap transfer. Oleh karena itu, dalam kerangka satu sesi melalui protokol FTP, beberapa file dapat ditransfer secara bersamaan, dan di kedua arah.
Jika Anda menjelaskan proses membuat koneksi dan selanjutnya mentransfer data titik demi titik, Anda mendapatkan sesuatu seperti berikut:
- Pengguna mengaktifkan aplikasi klien dan terhubung ke server dengan memasukkan nama pengguna dan kata sandi.
- β .
- , FTP- ( , FTP β , , ), , (, , , ..).
- ( , ), , FPT β , .
. - Setelah menyelesaikan transfer, koneksi ini ditutup, tetapi saluran kontrol antara interpreter tetap terbuka, sehingga pengguna dapat membuka kembali transfer data dalam sesi yang sama.
FTP - koneksi default adalah port 21, kecuali port lain diatur.
Penerapan
Dalam kasus ini, kami akan menggunakan kelas FTPClient dari perpustakaan Apache (org.apache.commons.net.ftp.FTPClient). Kami membuat objek kelas, mengatur waktu tunggu. Kemudian kita harus terlebih dahulu terhubung ke server menggunakan koneksi sebelum melakukan apa pun (dan ingat untuk memutuskan sambungan setelah kita selesai). Dalam koneksi, sebagai parameter pertama, kami menulis alamat lokal dari host, argumen kedua adalah port untuk koneksi. Anda juga perlu memeriksa kode respons FTP (terlalu jelas, tapi tetap saja) untuk memastikan koneksi berhasil.
import org.apache.commons.net.ftp.FTP
import org.apache.commons.net.ftp.FTPClient
import org.apache.commons.net.ftp.FTPReply
...
val con = FTPClient()
con.connectTimeout =
con.connect("192.168.0.105", 21)
if (FTPReply.isPositiveCompletion(con.replyCode)) {
//
}
Ok, kita terhubung ke server. Apa berikutnya? Sekarang Anda harus melalui otorisasi di bawah nama pengguna, yang sebenarnya kami buat untuk ini. Tetapi sebelum itu, Anda perlu mengatur mode koneksi data saat ini ke PASSIVE_LOCAL_DATA_CONNECTION_MODE menggunakan perintah enterLocalPassiveMode (). Ini berarti bahwa semua transfer akan terjadi antara klien dan server, dan server dalam mode pasif, menunggu klien untuk terhubung untuk memulai transfer. (misalnya, ACTIVE_LOCAL_DATA_CONNECTION_MODE menyiratkan bahwa server akan memulai koneksi).
Setelah itu, saat login, tulis username dan passwordnya. storeFile () menyimpan file di server menggunakan nama yang diberikan dan menerima input dari InputStream yang diberikan. Saya memiliki tugas untuk menulis secara berkala ke file tertentu di server, jadi terlihat seperti ini:
con.enterLocalPassiveMode()
if (con.login("nad", "nad")) { // (, )
con.setFileType(FTP.BINARY_FILE_TYPE)
val msg = "your_msg"
val msg_bytes: InputStream = ByteArrayInputStream(msg.toByteArray())
val result: Boolean = con.storeFile("/sms.txt", msg_bytes)
msg_bytes.close()
if (result) Log.v("upload result", "succeeded")
con.logout()
con.disconnect()
}
}
catch (ex: IOException) {
ex.printStackTrace()
return Result.failure()
}
Jika Anda ingin menyalin file Anda ke server secara keseluruhan, Anda dapat melakukan ini (intinya tidak banyak berubah, tetapi tiba-tiba seseorang membutuhkannya):
val file = File(" ")
val msg_bytes = FileInputStream(file)
Secara keseluruhan, hanya ini yang mungkin Anda butuhkan. Dan, tentu saja, sedikit tentang menyiapkan server FTP lokal. Saya memiliki ini, seperti yang saya tulis sebelumnya, FileZilla. Kami meninggalkan semuanya secara default. Buat pengguna dan tetapkan dia folder di host, tempat dia dapat membaca / menulis / menghapus, dll.
Itu saja. Luncurkan dan lihat log di server. Dan inilah yang harus Anda dapatkan:
Semoga berhasil!