java - شرح لتنفيذ بروتوكول سكب في مكتبة جش



ssh sftp (1)

أنا أفكر في مثال على استخدام مكتبة جش التي يمكن العثور عليها هنا:
http://www.jcraft.com/jsch/examples/ScpFrom.java.html

لا أستطيع أن أفهم العديد من أنماط التعليمات البرمجية من هذا المثال. ها هم:

  1. هل هناك أي أسباب لتفضل سكب عبر سفتب، والتي يمكن تشغيلها باستخدام نفس المكتبة؟

  2. لماذا نقوم بتشغيل scp -f <remote file> على المضيف البعيد بدلا من تشغيل ببساطة scp source_file_path destination_file_path ؟ لماذا التنفيذ على المضيف البعيد هو أفضل؟

  3. في بداية نقل هناك خط

    while(true){
    int c=checkAck(in);
    if(c!='C'){
        break;
    }
    ...

    ما هو معنى هذه الرسالة السحرية C ؟ لماذا C ؟

  4. لماذا لإرسال هذه الإشارة في كل وقت؟

    // send '\0'
    buf[0]=0; out.write(buf, 0, 1); out.flush();
  5. كيف يمكن قراءة الملفات؟

    long filesize=0L;
    while(true){
        if(in.read(buf, 0, 1)<0){
            // error
            break; 
        }
        if(buf[0]==' ')break;
        filesize=filesize*10L+(long)(buf[0]-'0'); //What is this??
    }

  1. هل هناك أي أسباب لتفضل سكب عبر سفتب، والتي يمكن تشغيلها باستخدام نفس المكتبة؟

لا، بروتوكول سكب عفا عليه الزمن. يجب دائما استخدام سفتب في الوقت الحاضر.

وعلى الرغم من أن عمليات التنفيذ الباهظة لبروتوكول سفتب تميل إلى أن تكون عمليات نقل أبطأ من سكب (ليس من السهل تنفيذ نقل سفتب بكفاءة نظرا لطبيعة حزمته).

  1. لماذا نقوم بتشغيل scp -f <remote file> على المضيف البعيد بدلا من تشغيل ببساطة scp source_file_path destination_file_path ؟ لماذا التنفيذ على المضيف البعيد هو أفضل؟

كيف يعمل بروتوكول سكب. يعمل أوبينش scp ثنائي scp والعميل. لذلك عند تشغيل scp محليا، فإنه يربط عبر سش ويدير scp على الملقم. ثم تتواصل الحالتان مع بعضهما البعض. يحل جش محل المثيل المحلي لل scp . لكنه لا يزال يحتاج إلى مثيل بعيد لإتمام عملية النقل.

إذا كنت تقوم بتشغيل scp محليا، يجب أن يكون أوبنسه مثبتا على الجهاز. ما هو شائع ربما على يونكس، ولكن بالتأكيد ليس على ويندوز. أيضا ليس هناك طريقة سهلة / موحدة لالتقاط النتائج من برنامج scp ، لترجمتها إلى واجهة جافا جشش. هذا هو السبب نفسه الذي يستخدم جش (أو أي مكتبة سفتب أخرى) بروتوكول سفتب من تلقاء نفسها، بدلا من استخدام برنامج sftp .

  1. ما هو معنى هذه الرسالة السحرية C؟ لماذا ج؟

يتم تعريف كل أمر من بروتوكول سكب حرف واحد. C يشير إلى "نقل الملفات"، D تقف على "نقل الدليل"، T قبل نقل الملف يشير إلى وقت التعديل من الملف نقل المقبل، وما إلى ذلك أنا لا أعرف لماذا انها C وليس على سبيل المثال F

  1. لماذا لإرسال هذه الإشارة في كل وقت؟

أمر الحرف نول ( \0 ) هو تأكيد / استجابة للموقع الآخر الذي تم فيه استكمال الأمر المستلم.

  1. كيف يمكن قراءة الملفات؟

يحتوي الأمر C على بناء الجملة (وهي سلسلة قابلة للقراءة البشرية):

C permissions size filename

فمثلا:

C 0644 153634 index.php

الحلقة في التعليمات البرمجية تترجم سلسلة "153634" إلى رقم 153634. يبدو وكأنه تطبيق معقد جدا، لكنه يعمل.





jsch