-
10.2.4.3 Contoh 3: Pengembangan protokol lapisan aplikasi jaringan
Tsinghua University Press "Pemrogram Java, Hal yang Dapat Dilakukan di Tempat Kerja" penulis: Zhong Sheng - Kutipan sebagian dari Bab 10 "Seorang master sama berbakatnya dengan kemampuannya".
Setiap orang mungkin pernah menggunakan alat unggah dan unduh FTP. Misalnya, "LeapFTP" adalah alat unggah dan unduh server FTP yang sangat nyaman, seperti yang ditunjukkan pada gambar. Alat ini sangat nyaman. Setelah memasukkan nama pengguna dan kata sandi, Anda dapat melihat daftar file di server FTP, yang memudahkan operasi pengunggahan dan pengunduhan.
Pernahkah Anda mencoba menulis aplikasi unggah dan unduh file FTP di Java?
Java juga bisa mengembangkan program seperti itu. Tidak rumit. Mari kita lihat dulu cara mengembangkan aplikasi FTP menggunakan toolkit FTP Java. Silakan lihat program berikut:
impor sun.net.*;
impor sun.net.ftp.*;
FTP kelas publik {
public static void main(String[] args) {
String server="192.168.0.12"; //Masukkan alamat IP server FTP
String pengguna="useway"; //Nama pengguna untuk masuk ke server FTP
String password=" !@#$%abce "; //Kata sandi nama pengguna untuk masuk ke server FTP
String path="/home/useway"; //Jalur di server FTP
mencoba {
FtpClient ftpClient=FtpClient baru(); //Buat objek FtpClient
ftpClient.openServer(server); //Hubungkan ke server FTP
ftpClient.login(pengguna, kata sandi); //Masuk ke server FTP
if (jalur.panjang()!=0) ftpClient.cd(jalur);
TelnetInputStream adalah=ftpClient.list();
ke dalam c;
while ((c=is.read())!=-1) {
Sistem.keluar.cetak((char)c);
}
adalah.close();
ftpClient.closeServer();//Keluar dari server FTP
}
tangkapan(Pengecualian ex){
}
}
}
Jika Anda tertarik, Anda dapat menulis sendiri program ini. Saat program ini dijalankan, kita akan melihat situasi seperti yang ditunjukkan pada gambar, mencantumkan isi direktori dari program sisi server.
Program ini merupakan program sederhana untuk mendapatkan daftar file di server FTP, namun jangan salah, program ini tidak bisa disebut sebagai pengembangan dari program "Network Application Layer Protocol"!
Program ini hanya menggunakan kelas terkait di "sun.net.*;" dan "sun.net.ftp.*;" untuk mengoperasikan sisi FTP permintaan dikirim ke klien, tetapi permintaan tautan dikirim ke server melalui toolkit yang disediakan oleh Java.
Keuntungan menggunakan paket FTP Java untuk terhubung ke server FTP adalah kita tidak perlu mempedulikan detail spesifik pengiriman data di tingkat jaringan, tetapi hanya perlu memanggil metode yang sesuai. Kerugian menggunakan paket FTP Java untuk terhubung ke server FTP adalah pengembang tidak mengetahui seluk beluk pengiriman dan penerimaan protokol lapisan aplikasi, tidak dapat memahami prinsip-prinsipnya, dan memiliki pemahaman yang sangat lemah terhadap data yang mendasarinya.
Pada titik ini, beberapa programmer akan bertanya: "Jadi bagaimana FTP berinteraksi antara PC dan server di tingkat jaringan?" Baiklah, izinkan saya membuat daftar proses interaksi protokol FTP untuk Anda.
Silakan lihat contoh interaksi protokol FTP berikut:
Server FTP: 220 (vsFTPd 2.0.1)
Klien FTP: cara penggunaan PENGGUNA
Server FTP: 331 Silakan tentukan kata sandinya.
Klien FTP: LULUS !@#$%abce
Server FTP: 230 Login berhasil.
Klien FTP: CWD /home/useway
Server FTP: 250 Direktori berhasil diubah.
Klien FTP: EPSV SEMUA
Server FTP: 200 EPSV SEMUA oke.
Klien FTP: EPSV
Server FTP: 229 Memasuki Mode Pasif Diperpanjang (|||62501|)
Klien FTP: DAFTAR
Server FTP: 150 Inilah daftar direktori.
Server FTP: 226 Direktori terkirim OK.
Klien FTP: BERHENTI
Server FTP: 221 Selamat tinggal.
Teks di atas sebenarnya adalah proses interaksi antara server FTP dan klien FTP. Protokol untuk mengirimkan informasi di antara keduanya adalah protokol TCP, dan konten yang dikirimkan satu sama lain adalah apa yang tertulis dalam teks di atas.
Mari kita jelaskan arti setiap kalimat langkah demi langkah:
Server FTP: 220 (vsFTPd 2.0.1) |. Deskripsi: Tautan berhasil
Klien FTP: USER useway | Petunjuk: Masukkan nama pengguna
Server FTP: 331 Silakan tentukan kata sandi |Deskripsi: Silakan masukkan kata sandi.
Klien FTP: PASS !@#$%abce |Petunjuk: Masukkan kata sandi
Server FTP: 230 Login berhasil.
Klien FTP: CWD /home/useway |. Deskripsi: Beralih direktori
Server FTP: 250 Direktori berhasil diubah. |Deskripsi: Peralihan direktori berhasil.
Klien FTP: EPSV SEMUA |. Deskripsi: Mode tautan pasif EPSV
Server FTP: 200 EPSV SEMUA OK
Klien FTP: EPSV |. Deskripsi: Tautan
Server FTP: 229 Memasuki Mode Pasif Diperpanjang (|||62501|) |Deskripsi: Port tautan pasif adalah 62501
Klien FTP: LIST |. Deskripsi: Jalankan LIST untuk menampilkan daftar file
Server FTP: 150 Inilah daftar direktori |. Deskripsi: Daftar dikirim dari port 62501
Server FTP: 226 Pengiriman direktori OK. |Deskripsi: Pengiriman selesai
Klien FTP: KELUAR |. Deskripsi: Keluar dari FTP
Server FTP: 221 Selamat tinggal |
Dengan isi teks di atas, kita bisa mendapatkan daftar file FTP tanpa alat apa pun. Jika Anda tidak percaya, ikuti saya dan lakukan lagi.
Langkah 1: Pertama buka CMD untuk masuk ke mode baris perintah DOS dan ketik:
telnet 192.168.0.1 21[Masuk]
Deskripsi: Telnet ke port 21 server Ftp.
Setelah menjalankan perintah ini, hasil yang diperoleh seperti pada gambar.
Apakah Anda menemukan masalah?
Isi promptnya persis dengan kalimat pertama paragraf di atas: 220 (vsFTPd 2.0.1), artinya server FTP telah menerima link kita dan dapat melanjutkan ke langkah berikutnya.
Langkah 2: Ketik rangkaian pengiriman konten berikut satu per satu:
Cara penggunaan PENGGUNA[Enter]
LULUS !@#$%abce [Masuk]
CWD /home/useway[Masuk]
EPSV SEMUA[Masuk]
EPSV[Masuk]
Hasil yang diperoleh ditunjukkan pada gambar.
Nah, kali ini server FTP memberikan serangkaian respon, dan akhirnya memberikan nomor port baru "58143".
Langkah 3: Buka jendela CMD baru dan ketik:
telnet 192.168.0.1 58143[Masuk]
Perhatikan bahwa nomor port permintaan Telnet untuk terhubung ke server kali ini adalah "58143", yang merupakan port tautan yang diberikan kepada kami oleh server FTP. Setelah ditautkan, jendela menjadi kosong tanpa petunjuk apa pun, seperti yang ditunjukkan pada gambar.
Langkah 4: Kembali ke jendela CMD pertama dan ketik:
DAFTAR[Masuk]
Langkah 5: Saat ini, jendela CMD kedua menerima daftar file:
Jendela kedua menerima daftar file seperti yang ditunjukkan pada gambar.
Langkah 6: Keluar dari operasi
BERHENTI[Masuk]
Setelah eksekusi selesai, link ke host hilang, seperti yang ditunjukkan pada gambar.
Seperti yang Anda lihat, protokol FTP adalah suatu proses interaktif. Anda juga dapat menyelesaikan operasi perintah dasar FTP ini dengan menggunakan alat Telnet yang disertakan dengan sistem. Jika Anda ingin menggunakan Socket Java untuk menyelesaikan operasi di atas, Anda hanya perlu mengikuti konten di atas langkah demi langkah untuk mengirim string ke server FTP.
Kami juga memberikan contoh kode di bawah ini:
impor java.io.InputStream;
impor java.io.OutputStream;
impor java.net.Socket;
Klien FTP kelas publik{
public static void main(String[] args) melempar Pengecualian{
Soket soket = Soket baru("192.168.0.1",21);
InputStream adalah = soket.getInputStream();
OutputStream os = soket.getOutputStream();
//Menerima informasi tautan awal
byte[] buffer = byte baru[100];
int panjang = is.read(buffer);
String s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Kirim nama pengguna
String str = "Jalur penggunaan PENGGUNAn";
os.write(str.getBytes());
//Dapatkan nilai kembaliannya
panjang = is.read(buffer);
s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Kirim kata sandi
str = "LULUS !@#$%abcdn ";
os.write(str.getBytes());
//Dapatkan nilai kembaliannya
panjang = is.read(buffer);
s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Kirim perintah peralihan folder
str = "CWD /rumah/usewayn";
os.write(str.getBytes());
//Dapatkan nilai kembaliannya
panjang = is.read(buffer);
s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Setel mode
str = "EPSV SEMUAn";
os.write(str.getBytes());
//Dapatkan nilai kembaliannya
panjang = is.read(buffer);
s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Dapatkan informasi pemantauan pasif
str = "EPSVn";
os.write(str.getBytes());
//Dapatkan nilai kembaliannya
panjang = is.read(buffer);
s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Dapatkan nomor port untuk pemantauan pasif FTP
String portlist=s.substring(s.indexOf("(|||")+4,s.indexOf("|)"));
System.out.println(daftar port);
// Buat instance kelas thread ShowList dan tautkan nomor port pendengaran pasif FTP
Daftar Pertunjukan sl=Daftar Pertunjukan baru();
sl.port=Integer.parseInt(daftar port);
sl.mulai();
//Jalankan perintah DAFTAR
str = "DAFTARn";
os.write(str.getBytes());
//Dapatkan nilai kembaliannya
panjang = is.read(buffer);
s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Tutup tautannya
adalah.close();
os.close();
soket.close();
}
}
//Dapatkan kelas informasi tautan pasif, kelas ini multi-thread
kelas ShowList memperluas Thread{
port int publik=0;
menjalankan kekosongan publik(){
mencoba{
Soket soket = Socket baru("192.168.0.1",port ini);
InputStream adalah = soket.getInputStream();
OutputStream os = soket.getOutputStream();
byte[] penyangga = byte baru[10000];
int panjang = is.read(buffer);
String s = String baru(buffer, 0, panjang);
Sistem.keluar.println;
//Tutup tautannya
adalah.close();
os.close();
soket.close();
}
tangkapan(Pengecualian ex){
}
}
}
Hasil pengoperasian yang diperoleh setelah menjalankan program adalah seperti yang ditunjukkan pada gambar. Pada dasarnya sama dengan efek pengoperasian di atas. Bagaimana dengan lapisan bawah? aturan operasinya, kita dapat mengembangkan program yang sama.