Selanjutnya, artikel sebelumnya akan diunggah dan diunduh.
5. Melanjutkan Breakpoint
Untuk pemrogram yang terbiasa dengan QQ, fungsi transmisi kontinu breakpoint QQ harus sangat mengesankan. Karena sangat praktis dan aspek. Oleh karena itu, selama proses unggahan dan pengunduhan kami, fungsi transmisi kontinu breakpoint diimplementasikan dengan sangat baik.
Faktanya, prinsip transmisi kontinu breakpoint sangat sederhana. Selama proses unggahan, buka layanan untuk mengetahui apakah file ini ada. Jika ada beberapa file, bandingkan ukuran file di server dengan ukuran file lokal. Jika file di server lebih kecil dari yang lokal, diyakini bahwa transmisi kontinu breakpoint harus dimungkinkan selama proses unggahan file ini.
Selama implementasi, kelas acak ACCACESSFILE menjadi berguna. Contoh dukungan kelas ini membaca dan menulis ke file akses acak. File akses acak berperilaku seperti array byte besar yang disimpan dalam sistem file. Ada kursor atau indeks yang menunjuk ke array implisit, yang disebut pointer file; Operasi input membaca byte dari pointer file dan bergerak maju pointer file saat byte dibaca. Jika file akses acak dibuat dalam mode baca/tulis, operasi output juga tersedia; Operasi output dimulai dengan pointer file dan memajukan pointer file saat byte ditulis. Operasi output setelah menulis ke akhir saat ini dari array implisit menyebabkan array berkembang. Pointer file dapat dibaca melalui metode GetFilePointer dan mengatur metode pencarian.
Metode Skipbytes dari kelas acak ACCACESSFILE mencoba untuk melewatkan input b byte untuk membuang byte yang dilewati. Jika Anda menemukan ukuran n file yang akan diunggah dari server, Anda dapat menggunakan metode Skipbytes untuk melewatkan b byte ini dan mulai melakukan transmisi kontinu breakpoint dari tempat baru. Untuk metode tertentu, silakan merujuk ke deskripsi API JDK5.
Anda dapat melihat implementasi mengunggah dan mengunduh transmisi kontinu titik interupsi dalam metode run dari kelas DataConnection. Kodenya adalah sebagai berikut:
public void run () {coba {newline = con.getcrlf (); if (settings.getftppasvmode ()) {coba {sock = soket baru (host, port); sock.setsoTimeout (settings.getSocketTimeOut ()); } catch (Exception ex) {ok = false; debug ("tidak dapat membuka soket di port" + port); }} else {//log.debug("rying soket server baru: "+port); coba {ssock = server baru (port); } catch (Exception ex) {ok = false; Log.debug ("tidak dapat membuka server di port" + port); }}} catch (Exception ex) {debug (ex.toString ()); } ISThere = true; boolean ok = true; RandomAccessFile fout = null; BufferedOutputStream Bout = null; RandomAccessFile sirip = null; coba {if (! settings.getftppasvmode ()) {int retry = 0; while ((retry ++ <5) && (sock == null)) {coba {ssock.setsoTimeout (settings.connectionTimeout); sock = ssock.accept (); } catch (ioException e) {sock = null; Debug ("Dapatkan IoException saat mencoba membuka soket!"); if (retry == 5) {debug ("Koneksi gagal, coba 5 kali - mungkin mencoba batas waktu yang lebih tinggi di settings.java"); } finish = true; lempar e; } akhirnya {ssock.close (); } debug ("Upaya TimeD Out, Retrying"); }} if (OK) {byte [] buf = byte baru [settings.bufferSize]; start = system.currentTimeMillis (); int buflen = 0; // --------------- Unduh , 下载 ---------------------- if (type.equals (get) || type.equals (getDir)) {if (! JustStream) {coba {if (resume) {file f = file baru (file); fout = randomAccessFile baru (file, "rw"); fout.skipbytes ((int) f.length ()); buflen = (int) f.length (); } else {if (localfile == null) {localfile = file; } File f2 = file baru (pengaturan.apphomedir); f2.mkdirs (); File f = file baru (localfile); if (f.exists ()) {f.delete (); } bout = baru bufferedOutputStream (FileOutputStream baru (localfile), settings.bufferSize); }} catch (Exception ex) {debug ("Tidak dapat membuat outputFile:" + file); ok = false; Ex.PrintStackTrace (); }} // --------------- Unggah , 上传 ---------------------- if (type.equals (put) || type.equals (putdir)) {if (in == null) {coba {fin = randomAccessFile baru (file, "r"); if (resume) {fin.skipbytes (skiplen); } // fin = baru bufferedInputStream (fileInputStream baru (file)); } catch (exception ex) {debug ("tidak dapat membuka inputFile:" + "(" + ex + ")"); ok = false; }} if (ok) {coba {out = new bufferedoutputStream (sock.getoutputStream ()); } catch (Exception ex) {ok = false; debug ("Can't Get OutputStream"); } If (ok) {coba {int len = skiplen; char b; while (true) {int read; if (in! = null) {baca = in.read (buf); } else {baca = fin.read (buf); } len += baca; //System.out.println(file + "" + type + "" + len + "" + baca); if (baca == -1) {break; } if (newline! = null) {byte [] buf2 = modifyput (buf, baca); out.write (buf2, 0, buf2.length); } else {out.write (buf, 0, baca); } con.fireprogressUpdate (file, type, len); if (time ()) {// log.debugsize (len, false, false, file); } if (baca == streamTokenizer.tt_eof) {break; }} out.flush (); //Log.debugsize(len, false, true, file); } catch (ioException ex) {ok = false; debug ("Kesalahan: Koneksi data ditutup."); con.fireprogressUpdate (file, gagal, -1); Ex.PrintStackTrace (); }}}}}}} catch (ioException ex) {log.debug ("tidak dapat menghubungkan soket ke serveringoket"); Ex.PrintStackTrace (); } akhirnya {coba {if (out! = null) {out.flush (); out.close (); }} catch (exception ex) {ex.printstacktrace (); } coba {if (bout! = null) {bout.flush (); bout.close (); }} catch (exception ex) {ex.printstacktrace (); } coba {if (fout! = null) {fout.close (); }} catch (exception ex) {ex.printstacktrace (); } coba {if (in! = null &&! JustStream) {in.close (); } if (fin! = null) {fin.close (); }} catch (exception ex) {ex.printstacktrace (); }} coba {sock.close (); } catch (exception ex) {debug (ex.toString ()); } if (! settings.getftppasvmode ()) {coba {ssock.close (); } catch (exception ex) {debug (ex.toString ()); }} finish = true; if (ok) {con.fireprogressUpdate (file, finish, -1); } else {con.fireprogressUpdate (file, gagal, -1); }} 6. Pemetaan Port FTP
Ada dua jenis koneksi data FTP: PASV dan port. Jika server FTP Anda terletak di intranet, Anda perlu menggunakan pemetaan port. Pada awalnya, saya tidak tahu banyak tentang pemetaan jaringan eksternal FTP, jadi saya mulai mengambil banyak jalan memutar. Pada awalnya, saya selalu berpikir bahwa ada sesuatu yang salah dengan program saya dan membuang banyak waktu. Saya berharap bahwa melalui periode ini, semua orang dapat menghabiskan lebih sedikit atau tidak ada waktu dan energi yang tidak perlu selama pengembangan.
Ada artikel tentang PCD yang memperkenalkan metode untuk secara langsung mengakses intranet. Bahkan, selama kita menggunakan alat pemetaan port, kita dapat dengan mudah mencapai tujuan menembus intranet. "Port Mapper" adalah alat seperti itu. Yang lebih layak disebutkan adalah menyingkirkan mode baris perintah dan menyediakan lingkungan operasi antarmuka grafis.
Untuk membuat Anda lebih memahami, izinkan saya berbicara tentang prinsipnya terlebih dahulu. Misalkan sekarang ada LAN dengan host A. Selain tuan rumah, ada juga mesin di LAN dengan B. Tentu saja, mesin B sedang menjelajahi internet melalui host A. Ada juga mesin yang dapat mengakses internet, yang tidak ada di lan yang sama dengan A dan B. Biasanya mesin C. Ini akan mentransfer data pada port yang ditentukan ke port yang ditentukan dari mesin lain di LAN, sehingga mencapai tujuan mengakses mesin intranet. Mengatakan seperti ini, semua orang mengerti. Adapun cara mengkonfigurasinya, penulis percaya bahwa itu seharusnya tidak menjadi tugas yang sulit. Selain itu, ada banyak penjelasan grafis seperti itu di internet. Silakan merujuk ke artikel di Internet untuk pengaturan.
Tentu saja, keuntungan mewujudkan akses langsung ke intranet sudah jelas. Belum lagi, setidaknya sumber daya FTP sepenuhnya digunakan. Namun, harus diingatkan bahwa akses langsung ke intranet dapat mengancam keamanan intranet. Penulis percaya bahwa sebagian besar teman masih mementingkan pentingnya keamanan tuan rumah, tetapi mereka sering mengabaikan pengaturan keamanan mesin intranet. Setelah Anda mencapai akses langsung ke intranet, Anda harus merawat mesin intranet seperti host, jika tidak, seluruh jaringan Anda mungkin dalam bahaya.
Akses sumber daya klien
Kebijakan keamanan lingkungan aplikasi Java, yang dinyatakan oleh objek kebijakan untuk izin sumber daya yang berbeda yang dimiliki oleh kode yang berbeda. Agar Applet (atau aplikasi yang berjalan di bawah SecurityManager) untuk melakukan perilaku yang dilindungi, seperti membaca dan menulis file, applet (atau aplikasi Java) harus mendapatkan izin untuk operasi itu, dan file kebijakan keamanan digunakan untuk mengimplementasikan izin ini.
Objek kebijakan mungkin memiliki banyak entitas, meskipun hanya satu yang dapat bekerja kapan saja. Objek kebijakan yang saat ini diinstal dapat diperoleh dalam program dengan memanggil metode getPolicy atau diubah dengan memanggil metode setPolicy. Objek kebijakan mengevaluasi seluruh kebijakan, mengembalikan objek izin yang sesuai yang merinci kode mana yang dapat mengakses sumber daya mana. File kebijakan dapat disimpan dalam file ASCII yang tidak diformat atau dalam file biner atau database kelas kebijakan. Artikel ini hanya membahas bentuk file ASCII yang tidak diformat.
Dalam penggunaan aktual, kita tidak perlu menulis file java. Polise yang kompleks secara manual, terutama ketika kita tidak menggunakan tanda tangan digital. Pada saat ini, kita dapat sepenuhnya belajar dari file C:/Program siap pakai/java/jre1.5.0_12/lib/keamanan/java.policy yang diberikan kepada kami oleh JRE, dan membuat modifikasi yang sesuai sesuai dengan kebutuhan kami. Artikel ini akan menulis file kebijakan keamanan untuk situasi di mana tanda tangan digital tidak digunakan. Di bawah ini adalah file java.policy lengkap yang digunakan di bawah Windows NT/XP. Dalam file tersebut, tujuan setiap catatan "izin" dijelaskan secara terpisah menggunakan komentar. Tentu saja, program yang berbeda mungkin memiliki persyaratan yang berbeda untuk hak akses sumber daya, dan dapat disesuaikan dan dipilih sesuai dengan kebutuhan proyek.
hibah {// izin untuk "membaca" sistem dan izin direktori pengguna java.util.propertypermisi "user.dir", "baca"; izin java.util.propertypermisi "user.home", "baca"; izin java.util.propertypermisi "java.home", "baca"; izin java.util.propertypermisi "java.home", "baca"; izin java.util.propertypermisi "java.class.pat", "baca"; izin java.util.propertypermisi "user.name", "baca"; // Izin Operasi pada Thread and Thread Group Izin Java.lang.RunTimePermission "AccessClassinPackage.sun.misc"; Izin java.lang.runtimePermission "AccessClassInpackage.sun.audio"; izin java.lang.runtimePermission "ModifyThread"; izin java.lang.runtimePermission "ModifyThreadGroup"; izin java.lang.runtimepermission "LoadLibrary.*"; // izin untuk membaca dan menulis file izin java.io.filePermission "<< semua file >>", "baca"; Izin java.io.filePermission "$ {user.dir} $ {/} jmf.log", "write"; izin java.io.filePermission "$ {user.home} $ {/}. JMStudiocfg", "write"; izin java.net.socketpermission "*", "connect, recree"; izin java.io.filePermission "c:/winnt/temp/*", "write"; izin java.io.filePermission "c:/winnt/temp/*", "delete"; izin java.awt.awtpermission "showwindowwithoutwarningbanner"; izin javax.sound.sampled.AudiOpermission "Rekor"; // // Berbagai izin untuk pengoperasian port soket izin java.net.socketpermission "-", "Listen"; izin java.net.socketpermisi "-", "terima"; izin java.net.socketpermission "-", "connect"; izin java.net.socketpermission "-", "resolve"; izin java.security.allpermission; }; hibah Signedby "saili" {izin java.net.socketpermission "*: 1024-65535", "Connect, Recree, Collect"; izin java.net.socketpermission "*: 80", "connect"; Izin java.net.socketpermission "-", "Listen, Recree, Connect, Listen, Selesaikan", Signedby "Ganja"; izin java.net.socketpermisi "-", "terima"; izin java.net.socketpermission "-", "connect"; izin java.net.socketpermission "-", "resolve"; izin java.security.allpermission; }; Dalam proyek ini, untuk membuatnya lebih nyaman dan sederhana untuk menggunakan pengaturan pengguna klien, file di atas dibuat menjadi program kecil menggunakan VB atau C#. Kemudian gabungkan JRE dan beberapa mantan ke dalam paket exe. Setelah JRE diinstal, applet ini bertanggung jawab untuk menemukan jalur instalasi JRE dalam sistem operasi, dan menulis file java.policy dalam program untuk menimpa file asli. Dengan cara ini, pengguna hanya perlu menginstal file EXE, yang menyederhanakan jumlah operasi instalasi.
7. Applet Callback Server
Kemampuan JavaScript dan applet untuk berkomunikasi satu sama lain membawa kita banyak kenyamanan. Java dan JavaScript saling melengkapi untuk mengembangkan aplikasi web yang lebih sempurna. B/S dapat memanfaatkan sepenuhnya keunggulan Java, memberi kami lebih banyak pengalaman jaringan dan membuatnya nyaman bagi pengguna. Penulis menggunakan lebih banyak aplikasi yang dikembangkan oleh komponen ayunan untuk mengimplementasikan arsitektur B/S menggunakan Applet, yang sepenuhnya dapat menunjukkan keunggulan komponen ayunan, memfasilitasi peningkatan sistem dan memelihara; Selain itu, di bawah web, terkadang klien perlu menggunakan sumber daya perangkat keras lokal. Yang saya tahu adalah bahwa itu diimplementasikan melalui Applet dan memanggil Java API melalui Applet. Mari kita lihat bagaimana JavaScript dan applet berkomunikasi secara detail?
1. Akses Javascript ke Applet
<applet name = "appletname" .... /// javascript mengakses properti applet.
window.document.appletname.appletfield (properti harus publik, "window.document." Juga dapat ditulis tanpa menulis) // akses javascript ke metode applet.
window.document.appletname.appletmethod (metode harus publik, "window.document." Juga dapat ditulis tanpa menulis).
2.Applet Access ke JavaScript
Live Connect menyediakan antarmuka antara Java dan JavaScript, yang memungkinkan JavaScript untuk digunakan dalam applet applet Java.
Anda perlu menggunakan paket JAR, dan mencarinya di file C:/Program/Java/direktori. Sekitar 5m. Bahkan, hanya untuk membukanya untuk melihat mana yang memiliki netscape.javascript.jsObject. Jika Anda tidak menginstal Netscape atau Anda dapat melakukannya secara online atau offline. Anda dapat mengganti nama menjadi netscape.jar (tidak perlu), dan harus ditambahkan ke Classpath, dengan tujuan membuatnya dikompilasi selama pengembangan. Sangat penting untuk dicatat bahwa Netscape.jar tidak diharuskan untuk dimasukkan selama penyebaran, karena seluruh paket akan diunduh ke klien, mempengaruhi kecepatan.
// memperkenalkan kelas Netscape impor Netscape.javascript.jsObject; impor netscape.javascript.jsexception; // Dapat diizinkan untuk menangani acara pengecualian di applet public void callJavAscript (string callbackJavaScript) {jsobject window = jsobject.getWindow (ini); // Dapatkan pegangan jendela JavaScript dan rujuk ke jendela dokumen JSObject Document = (JSObject) window.getMember ("Dokumen"); form = (jsObject) doc.getMember ("TextForm"); // Akses Formulir Formulir JavaScript TextField = (JSObject) Form.GetMember ("TextField"); Akses Teks Teks Teks JavaScript = (String) TextField.getMember ("Nilai"); // Dapatkan nilai area teks // hubungi metode javascript () // window.eval ("peringatan (/" Peringatan ini berasal dari java!/")"); window.call (callbackJavaScript, null); // parameter diwakili dalam bentuk array. }8. Efek Operasi
1. Unggah
(1). Mulai mengunggah
(2). Mengunggah
(3). Mengunggah
(4). Unggah berhasil
2. Unduh
(1) Simpan jalur file unduhan
(2) Mengunduh
(3) Mengunduh
(4) Unduh dengan sukses
9. Ringkasan
Dalam artikel ini, penulis akan menjelaskan solusi untuk masalah unggahan dan unduhan dalam proyek aktual, dan menggunakan protokol FTP untuk mencapai batch, dasar web besar web unggahan dan unduhan. Pada saat yang sama, dapat mengakses sumber daya lokal pada klien melalui teknologi applet. Diskusi awal dilakukan pada beberapa fungsi aktual yang sering orang temui, seperti bilah progres, transmisi kontinu breakpoint, pemetaan jaringan internal dan eksternal FTP, dll. Ini adalah aplikasi dasar penulis berdasarkan beberapa perpustakaan klien FTP Java. Saya berharap ini akan menjadi referensi bagi pembaca. Menambah beberapa hal yang belum selesai ini. Ada juga beberapa konten yang relatif mudah dan memiliki deskripsi atau contoh online yang tidak tercantum di sini. Misalnya, bagaimana FTP dapat membuat layanan FTP pada perangkat lunak serv-u sisi server, bagaimana applet tertanam dalam halaman JSP dan metode pengiriman parameter, dan bagaimana applet dimulai di bawah gerhana atau netbeans, karena keterbatasan ruang, tidak ada deskripsi terperinci. Silakan merujuk ke contoh atau materi referensi lainnya di internet.
Alamat unduh: http://xiazai.vevb.com/201608/yuanma/ftptransfer(vevb.com).rar
Catatan: Mempertimbangkan masalah hak cipta, file kelas Java tidak dikirim, tapi saya pikir semua orang sudah terbiasa dengan cara mengembalikan file jar seperti file java, haha.
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.