بعد ذلك ، سيتم تحميل المقالة السابقة وتنزيلها.
5. استئناف نقطة التوقف
بالنسبة للمبرمجين الذين يعرفون QQ ، يجب أن تكون وظيفة الإرسال المستمرة لنقطة الإيقاف في QQ مثيرة للإعجاب للغاية. لأنها عملية وجانبية للغاية. لذلك ، أثناء عملية التحميل والتنزيل ، يتم تنفيذ وظيفة الإرسال المستمر بشكل جيد للغاية.
في الواقع ، مبدأ انتقال نقطة التوقف مستمر بسيط للغاية. أثناء عملية التحميل ، انتقل إلى الخدمة لمعرفة ما إذا كان هذا الملف موجودًا. في حالة وجود بعض الملفات ، قارن حجم الملف على الخادم بحجم الملف المحلي. إذا كانت الملفات الموجودة على الخادم أصغر من المنتج المحلي ، فمن المعتقد أن الإرسال المستمر نقطة التوقف يجب أن يكون ممكنًا أثناء عملية تحميل هذا الملف.
أثناء التنفيذ ، تصبح فئة RandomAccessFile مفيدة. مثيلات دعم هذا الفئة قراءة واكتب إلى ملفات الوصول العشوائي. تتصرف ملفات الوصول العشوائي مثل صفيف بايت كبير مخزّن في نظام الملفات. هناك مؤشر أو فهرس يشير إلى الصفيف الضمني ، يسمى مؤشر الملف ؛ تقرأ عملية الإدخال بايت من مؤشر الملف وتتحرك إلى الأمام مؤشر الملف حيث تتم قراءة البايت. إذا تم إنشاء ملف الوصول العشوائي في وضع القراءة/الكتابة ، فإن عملية الإخراج متوفرة أيضًا ؛ تبدأ عملية الإخراج بمؤشر الملف وتقدم مؤشر الملف عند كتابة البايت. تؤدي عملية الإخراج بعد الكتابة إلى الطرف الحالي للمصفوفة الضمنية إلى توسيع الصفيف. يمكن قراءة مؤشر الملف من خلال طريقة getFilePointer وتعيينها من خلال طريقة البحث.
تحاول طريقة Skipbytes لفئة RandomAccessFile تخطي مدخلات بايت لتجاهل البايتات التي تم تخطيها. إذا وجدت حجم الملف المراد تحميله من الخادم ، فيمكنك استخدام طريقة Skipbytes لتخطي هذه البايتات والبدء في إجراء ناقل حركة مستمر نقطة التوقف من مكان جديد. للحصول على طرق محددة ، يرجى الرجوع إلى وصف API لـ JDK5.
يمكنك رؤية تنفيذ التحميل وتنزيل ناقل الحركة المستمر في نقطة التشغيل في طريقة تشغيل فئة DataConnection. الرمز كما يلي:
public void run () {try {newLine = con.getCrlf () ؛ if (settings.getftPPasvMode ()) {try {sock = new Socket (host ، port) ؛ Sock.SetSotimeout (Settings.getSockettimeOut ()) ؛ } catch (استثناء ex) {ok = false ؛ Debug ("لا يمكن فتح مأخذ التوصيل على المنفذ" + منفذ) ؛ }} else {//log.debug("Trying مقبس خادم جديد: "+منفذ) ؛ جرب {ssock = serversoCkE (منفذ) ؛ } catch (استثناء ex) {ok = false ؛ log.debug ("لا يمكن فتح ServersOcke على المنفذ" + منفذ) ؛ }}} catch (استثناء ex) {debug (ex.ToString ()) ؛ } isThere = true ؛ منطقية موافق = صحيح ؛ RandomAccessfile fout = null ؛ bufferedoutputstream bout = null ؛ RandomAccessFile Fin = NULL ؛ جرب {if (! settings.getftPpasVmode ()) {int recept = 0 ؛ بينما ((RETRY ++ <5) && (sock == null)) {try {ssock.setsotimeout (settings.connectionTimeOut) ؛ Sock = ssock.accept () ؛ } catch (ioException e) {sock = null ؛ تصحيح ("حصلت على ioException أثناء محاولة فتح مقبس!") ؛ if (Retry == 5) {debug ("فشل الاتصال ، حاول 5 مرات - ربما جرب مهلة أعلى في الإعدادات. java") ؛ } الانتهاء = صحيح ؛ رمي ه ؛ } أخيرًا {ssock.close () ؛ } تصحيح ("محاولة توقيت ، إعادة المحاولة") ؛ }} if (ok) {byte [] buf = new byte [settings.buffersize] ؛ start = system.currentTimeMillis () ؛ int buflen = 0 ؛ // --------------- تنزيل , 下载 ---------------------- if (type.equals (get) || type.equals (getDir)) {if (! justStream) {try {if (resume) {file f = new file) ؛ fout = new RandomAccessFile (ملف ، "RW") ؛ fout.skipbytes ((int) f.length ()) ؛ buflen = (int) f.length () ؛ } آخر {if (localfile == null) {localfile = file ؛ } FILE F2 = ملف جديد (الإعدادات. f2.mkdirs () ؛ ملف f = ملف جديد (localfile) ؛ if (f.exists ()) {f.delete () ؛ } bout = new BufferedOutputStream (FileOutputStream جديد (localfile) ، settings.buffersize) ؛ }} catch (استثناء ex) {debug ("لا يمكن إنشاء outputFile:" + file) ؛ موافق = خطأ ؛ ex.printStackTrace () ؛ }} // --------------- التحميل , 上传 ---------------------- if (type.equals (pum) || type.equals (putdir)) {if (in == null) {try {fin = new randomaccessfile (file ، "r") ؛ if (استئناف) {fin.skipbytes (skiplen) ؛ } // fin = new BufferEdInputStream (FileInputStream جديد (ملف)) ؛ } catch (استثناء ex) {debug ("لا يمكن فتح inputFile:" + "(" + ex + ")") ؛ موافق = خطأ ؛ }} if (ok) {try {out = new BufferEdoutPutStream (sock.getOutputStream ()) ؛ } catch (استثناء ex) {ok = false ؛ Debug ("لا يمكن الحصول على OutputStream") ؛ } if (ok) {try {int len = skiplen ؛ شار ب ؛ بينما (صحيح) {int read ؛ if (in! = null) {read = in.read (buf) ؛ } آخر {read = fin.read (buf) ؛ } len += read ؛ //system.out.println(file + "" + type + "" + len + "" + read) ؛ if (read == -1) {break ؛ } if (newline! = null) {byte [] buf2 = modifyput (buf ، read) ؛ out.write (buf2 ، 0 ، buf2.length) ؛ } آخر {out.write (buf ، 0 ، read) ؛ } con.fireprogressUpDate (ملف ، اكتب ، len) ؛ if (time ()) {// log.debugsize (len ، false ، false ، file) ؛ } if (read == StreamTokenizer.tt_eof) {break ؛ }} out.flush () ؛ //log.debugsize(len ، false ، true ، file) ؛ } catch (ioException ex) {ok = false ؛ Debug ("خطأ: اتصال البيانات مغلق.") ؛ con.fireprogressUpdate (ملف ، فشل ، -1) ؛ ex.printStackTrace () ؛ }}}}}}} catch (ioException ex) {log.debug ("لا يمكن توصيل المقبس إلى serversocket") ؛ ex.printStackTrace () ؛ } أخيرًا {try {if (out! = null) {out.flush () ؛ out.close () ؛ }} catch (استثناء ex) {ex.printStackTrace () ؛ } حاول {if (bout! = null) {bout.flush () ؛ bout.close () ؛ }} catch (استثناء ex) {ex.printStackTrace () ؛ } حاول {if (fout! = null) {fout.close () ؛ }} catch (استثناء ex) {ex.printStackTrace () ؛ } حاول {if (in! = null &&! JustStream) {in.close () ؛ } if (fin! = null) {fin.close () ؛ }} catch (استثناء ex) {ex.printStackTrace () ؛ }} حاول {sock.close () ؛ } catch (استثناء ex) {debug (ex.toString ()) ؛ } if (! settings.getftPpasVmode ()) {try {ssock.close () ؛ } catch (استثناء ex) {debug (ex.toString ()) ؛ }} انتهى = صحيح ؛ if (ok) {con.FireProgressUpDate (ملف ، الانتهاء ، -1) ؛ } آخر {con.fireprogressUpDate (ملف ، فشل ، -1) ؛ }} 6. رسم خرائط منفذ FTP
هناك نوعان من اتصالات بيانات FTP: PASV و PORT. إذا كان خادم FTP الخاص بك موجودًا في إنترانت ، فأنت بحاجة إلى استخدام تعيين المنفذ. في البداية ، لم أكن أعرف الكثير عن رسم خرائط الشبكة الخارجية لـ FTP ، لذلك بدأت في أخذ الكثير من التفاف. في البداية ، اعتقدت دائمًا أن هناك شيئًا خاطئًا في برنامجي وأهدر الكثير من الوقت. آمل أنه خلال هذه الفترة ، يمكن للجميع أن ينفقوا وقتًا أقل أو لا لزوم لهما أثناء التنمية.
كان هناك مقال عن PCD قدم طريقة للوصول مباشرة إلى الإنترانت. في الواقع ، طالما نستخدم أداة تعيين المنفذ ، يمكننا بسهولة تحقيق الغرض من اختراق الإنترانت. "Port Mapper" هي أداة. ما يجدر الإشارة إليه هو أنه يتخلص من وضع سطر الأوامر ويوفر بيئة تشغيل واجهة رسومية.
من أجل أن تجعلك تفهم المزيد ، اسمحوا لي أن أتحدث عن المبدأ أولاً. لنفترض أن هناك الآن LAN مع المضيف A. بالإضافة إلى المضيف ، يوجد أيضًا آلة في الشبكة المحلية مع B. بالطبع ، تقوم جهاز B بتصفح الإنترنت من خلال المضيف A. هناك أيضًا آلة يمكنها الوصول إلى الإنترنت ، والتي لا تكون في LAN في نفس الشبكة A و B. لا يمكن للآلة فقط الوصول إلى المضيف A ، ولكن لا يمكنها اختراق LAN و Access Port Mapp ، ستقوم بنقل البيانات الموجودة على المنفذ المحدد إلى المنفذ المحدد لآلة أخرى في الشبكة المحلية ، وبالتالي تحقيق الغرض من الوصول إلى آلة إنترانت. قولًا بهذه الطريقة ، يفهم الجميع. أما بالنسبة لكيفية تكوينه ، فإن المؤلف يعتقد أنه لا ينبغي أن يكون مهمة صعبة. علاوة على ذلك ، هناك العديد من هذه التفسيرات الرسومية على الإنترنت. يرجى الرجوع إلى المقالات على الإنترنت للإعداد.
بالطبع ، فإن مزايا تحقيق الوصول المباشر إلى الإنترانت واضحة. ناهيك عن أي شيء آخر ، على الأقل يتم استخدام موارد FTP بالكامل. ومع ذلك ، يجب تذكير أن الوصول المباشر إلى الإنترانت قد يهدد أمن الإنترانت. يعتقد المؤلف أن معظم الأصدقاء ما زالوا يعلمون أهمية بأهمية الأمن المضيف ، لكنهم غالبًا ما يتجاهلون الإعدادات الأمنية لآلات إنترانت. بمجرد أن تحصل على الوصول المباشر إلى الإنترانت ، يجب عليك التعامل مع آلات الإنترانت مثل المضيف ، وإلا فقد تكون شبكتك بأكملها في خطر.
الوصول إلى موارد العميل
السياسة الأمنية لبيئة تطبيق Java ، والتي يتم التعبير عنها بواسطة كائن سياسي لأذونات الموارد المختلفة التي تملكها رموز مختلفة. من أجل الحصول على تطبيق Applet (أو تطبيق يعمل ضمن SecurityManager) لإجراء سلوكيات محمية ، مثل قراءة ملفات وكتابة ، يجب الحصول على Applet (أو تطبيقات Java) للحصول على إذن لتلك العملية ، ويتم استخدام ملف سياسة الأمان لتنفيذ هذه الأذونات.
قد يحتوي كائن السياسة على كيانات متعددة ، على الرغم من أن شخصًا واحدًا فقط يمكنه العمل في أي وقت. يمكن الحصول على كائن السياسة المثبتة حاليًا في البرنامج من خلال استدعاء طريقة getPolicy أو تغييره عن طريق استدعاء طريقة setPolicy. يقوم كائن السياسة بتقييم السياسة بأكملها ، مع إرجاع كائن الأذونات المناسب الذي يفصل الرمز الذي يمكنه الوصول إلى الموارد. يمكن تخزين ملفات السياسة في ملفات ASCII غير المطوّلة أو في الملفات الثنائية أو قواعد البيانات في فئة السياسة. تناقش هذه المقالة فقط شكل ملفات ASCII غير المطاف.
في الاستخدام الفعلي ، لا نحتاج إلى كتابة ملفات Java.policy المعقدة يدويًا ، خاصةً عندما لا نستخدم التواقيع الرقمية. في هذا الوقت ، يمكننا أن نتعلم تمامًا من ملف C:/برنامج جاهز/JAVA/JRE1.5.0_12/lib/security/java.policy الذي قدمته لنا JRE ، وقم بإجراء تعديلات مطابقة وفقًا لاحتياجاتنا. ستقوم هذه المقالة بكتابة ملف سياسة أمنية للموقف الذي لا يتم فيه استخدام التواقيع الرقمية. فيما يلي ملف Java.Policy كامل يستخدم ضمن Windows NT/XP. في الملف ، يتم شرح الغرض من كل سجل "إذن" بشكل منفصل باستخدام التعليقات. بالطبع ، قد يكون للبرامج المختلفة متطلبات مختلفة لحقوق الوصول إلى الموارد ، ويمكن تعديلها واختيارها وفقًا لاحتياجات المشروع.
منح {// إذن "قراءة" إذن النظام ودليل المستخدم إذن java.util.propertypermission "user.dir" ، "read" ؛ إذن java.util.propertypermission "user.home" ، "read" ؛ إذن java.util.propertypermission "java.home" ، "read" ؛ إذن java.util.propertypermission "java.home" ، "read" ؛ إذن java.util.propertypermission "java.class.pat" ، "read" ؛ إذن java.util.propertypermission "user.name" ، "read" ؛ // أذونات التشغيل على مؤشرات الترابط ومجموعات الخيوط إذن Java.lang.RuntImePermission "AccessClassInPackage.sun.misc" ؛ إذن java.lang.runtimepermission "AccessClassInPackage.sun.audio" ؛ إذن java.lang.runtimepermission "modifyThRead" ؛ إذن java.lang.runtimepermission "modifyThReadGroup" ؛ إذن java.lang.runtimepermission "loadlibrary.*" ؛ // إذن لقراءة وكتابة الملفات الإذن java.io.filePermission "<< جميع الملفات >>" ، "قراءة" ؛ إذن java.io.filepermission "$ {user.dir} $ {/} jmf.log" ، "write" ؛ إذن java.io.filepermission "$ {user.home} $ {/}. إذن java.net.socketpermission "*" ، "connect ، قبول" ؛ إذن java.io.filepermission "c:/winnt/temp/*" ، "write" ؛ إذن java.io.filepermission "c:/winnt/temp/*" ، "delete" ؛ إذن java.awt.awtpermission "showwindowwithoutwarningbanner" ؛ إذن javax.sound.sampled.audiopermission "سجل" ؛ // // أذونات مختلفة لتشغيل منافذ المقبس الإذن java.net.socketpermission "-" ، "الاستماع" ؛ إذن java.net.socketpermission "-" ، "قبول" ؛ إذن java.net.socketpermission "-" ، "connect" ؛ إذن java.net.socketpermission "-" ، "حل" ؛ إذن java.security.allpermission ؛ } ؛ Grant signbyby "saili" {إذن java.net.socketpermission "*: 1024-65535" ، "connect ، قبول ، حل" ؛ إذن java.net.socketpermission "*: 80" ، "connect" ؛ إذن java.net.socketpermission "-" ، "الاستماع ، قبول ، الاتصال ، الاستماع ، حل" ، signedby "ganja" ؛ إذن java.net.socketpermission "-" ، "قبول" ؛ إذن java.net.socketpermission "-" ، "connect" ؛ إذن java.net.socketpermission "-" ، "حل" ؛ إذن java.security.allpermission ؛ } ؛ في هذا المشروع ، لجعله أكثر ملاءمة وبساطة لاستخدام إعدادات مستخدم العميل ، يتم تحويل الملف أعلاه إلى برنامج صغير باستخدام VB أو C#. ثم الجمع بين JRE وبعض exes في حزمة exe. بعد تثبيت JRE ، يكون هذا التطبيق مسؤولاً عن العثور على مسار التثبيت لـ JRE في نظام التشغيل ، واكتب ملف java.policy في البرنامج للكتابة فوق الملف الأصلي. وبهذه الطريقة ، يحتاج المستخدم فقط إلى تثبيت ملف EXE ، مما يبسط عدد عمليات التثبيت.
7. خادم رد الاتصال على التطبيقات
إن قدرة JavaScript و Applet على التواصل مع بعضها البعض تجلب لنا الكثير من الراحة. يكمل Java و JavaScript بعضهما البعض لتطوير تطبيقات الويب أكثر مثالية. يمكن أن يستفيد B/S من مزايا Java ، مما يجعلنا المزيد من الخبرة في الشبكة وجعلها مريحة للمستخدمين. يستخدم المؤلف المزيد من التطبيقات التي تم تطويرها بواسطة مكونات التأرجح لتنفيذ بنية B/S باستخدام Applet ، والتي يمكن أن تُظهر بالكامل مزايا مكونات التأرجح ، وتسهيل ترقيات النظام والحفاظ عليها ؛ بالإضافة إلى ذلك ، تحت الويب ، في بعض الأحيان يحتاج العميل إلى استخدام موارد الأجهزة المحلية. ما أعرفه هو أنه يتم تنفيذه من خلال Applet ويتصل بـ Java API من خلال Applet. دعنا نلقي نظرة على كيفية تواصل JavaScript و Applet بالتفصيل؟
1. جافا سكريبت الوصول إلى التطبيقليت
<applet name = "appletname" .... /// JavaScript تصل إلى خصائص Applet.
window.document.appletname.appletfield (يجب أن يكون الخاصية عامة ، "window.document".
window.document.appletname.appletmethod (يجب أن تكون الطريقة عامة ، "window.document." يمكن أيضًا كتابة دون كتابة).
2. الوصول إلى جافا سكريبت
يوفر Live Connect واجهة بين Java و JavaScript ، والتي تتيح استخدام JavaScript في تطبيقات Java Applet.
تحتاج إلى استخدام حزمة JAR ، والبحث عنها في ملفات C:/Program/Java/Directory. إنه حوالي 5 أمتار. في الواقع ، إنه مجرد فتحه لمعرفة أي شخص لديه netscape.javaScript.jsobject. إذا لم يكن لديك Netscape مثبتة أو يمكنك القيام بذلك عبر الإنترنت أو في وضع عدم الاتصال. يمكنك إعادة تسميته إلى netscape.jar (غير ضروري) ، ويجب إضافته إلى ClassPath ، بهدف جعلها تجمع أثناء التطوير. من المهم بشكل خاص ملاحظة أن netscape.jar غير مطلوب لإدراجه أثناء النشر ، لأنه سيتم تنزيل الحزمة بأكملها على العميل ، مما يؤثر على السرعة.
// إدخال فئة NetScape استيراد netscape.javaScript.jsobject ؛ استيراد netscape.javaScript.jsexception ؛ // يمكن السماح بمعالجة أحداث الاستثناء في Applets public void calljavaScript (سلسلة callbackjavaScript) {jsobject window = jsobject.getWindow (this) ؛ // احصل على مقبض نافذة JavaScript ويرجع إلى نافذة المستند الحالية jsobject document = (jsobject) window.getMember ("document") ؛ form = (jsobject) doc.getMember ("textform") ؛ // access the JavaScript Form Object Siderfield = (jsobject) form.getMember ("textfield") ؛ الوصول إلى نص كائن النص javaScript = (سلسلة) textfield.getMember ("value") ؛ // احصل على قيمة منطقة النص // استدعاء طريقة التنبيه () javaScript () // window.eval ("التنبيه (/" هذا التنبيه يأتي من java!/")") ؛ Window.Call (CallbackJavaScript ، NULL) ؛ // يتم تمثيل المعلمات في شكل صفيف. }8. تأثير العملية
1. التحميل
(1). ابدأ التحميل
(2). التحميل
(3). التحميل
(4). التحميل بنجاح
2. تحميل
(1) حفظ مسار ملف التنزيل
(2) التنزيل
(3) التنزيل
(4) تنزيل بنجاح
9. ملخص
في هذه المقالة ، سيشرح المؤلف الحل لمشكلة التحميل والتنزيل في المشاريع الفعلية ، واستخدام بروتوكول FTP لتحقيق الدُفعات الأساسية ، تحميل الملفات الكبيرة وتنزيلها. في الوقت نفسه ، يمكنه الوصول إلى الموارد المحلية على العميل من خلال تقنية التطبيقات. تم إجراء مناقشة أولية على بعض الوظائف الفعلية التي يواجهها الأشخاص غالبًا ، مثل شريط التقدم ، ونقل نقطة التوقف المستمر ، ورسم الخرائط للشبكة الداخلية والخارجية FTP ، وما إلى ذلك. هذا هو التطبيق الأساسي للمؤلف استنادًا إلى بعض مكتبات عميل Java FTP. آمل أن تكون مرجعا للقراء. تكملة بعض هذه الأمور غير المكتملة. هناك أيضًا بعض المحتويات سهلة نسبيًا ولديها أوصاف أو أمثلة عبر الإنترنت غير مدرجة هنا. على سبيل المثال ، كيف يمكن لـ FTP إنشاء خدمات FTP على برامج Serv-U من جانب الخادم ، وكيفية تضمين التطبيقات في صفحات JSP وطرق توصيل المعلمات ، وكيف تبدأ التطبيقات تحت Eclipse أو NetBeans ، بسبب قيود المساحة ، لا يوجد وصف مفصل. يرجى الرجوع إلى الأمثلة أو غيرها من المواد المرجعية على الإنترنت.
تنزيل عنوان:
ملاحظة: بالنظر إلى قضية حقوق الطبع والنشر ، لم يتم إرسال ملف فئة Java ، لكنني أعتقد أن الجميع على دراية بكيفية استعادة ملف JAR هذا إلى ملف Java ، هاها.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.