Далее, предыдущая статья будет загружена и загружена.
5. Возобновление точки останова
Для программистов, которые знакомы с QQ, функция непрерывной передачи QQ должна быть очень впечатляющей. Потому что это очень практично и аспект. Поэтому во время нашего процесса загрузки и загрузки функция непрерывной передачи точки останова очень хорошо реализована.
На самом деле, принцип непрерывной передачи точки останова очень прост. Во время процесса загрузки перейдите в службу, чтобы узнать, существует ли этот файл. Если существуют некоторые файлы, сравните размер файла на сервере с размером локального файла. Если файлы на сервере меньше локального, считается, что непрерывная передача точки останова должна быть возможна в процессе загрузки этого файла.
Во время реализации класс randomaccessfile становится полезным. Экземпляры этого класса поддержка чтения и записи в файлы случайного доступа. Файлы случайного доступа ведут себя как большой байтовый массив, хранящийся в файловой системе. Существует курсор или индекс, указывающий на неявный массив, называемый указателем файла; Операция ввода считывает байты из указателя файла и перемещает указатель файла, когда байт читается. Если файл случайного доступа создается в режиме чтения/записи, операция вывода также доступна; Операция вывода начинается с указателя файла и продвигает указатель файла, когда написан байт. Выходная операция после записи на текущий конец неявного массива заставляет массив расширяться. Указатель файла можно прочитать через метод GetFilePointer и установить метод поиска.
Метод Skipbytes класса Randomaccessfile пытается пропустить входные байты, чтобы отказаться от пропущенных байтов. Если вы найдете размер N файла, который будет загружен с сервера, вы можете использовать метод Skipbytes, чтобы пропустить эти N Bytes и начать выполнять непрерывную передачу точки останова из нового места. Для конкретных методов, пожалуйста, обратитесь к описанию API JDK5.
Вы можете увидеть реализацию загрузки и загрузки непрерывной передачи точки прерывания в методе выполнения класса DataConnect. Код заключается в следующем:
public void run () {try {newline = con.getCrlf (); if (stens.getftppasvmode ()) {try {sock = new Socket (host, port); sock.setsotimeout (settings.getsockettimeout ()); } catch (Exception ex) {ok = false; отладка («Не могу открыть сокет на порту» + порт); }} else {//log.debug("tring Новый серверный сокет: "+port); try {ssock = new Serversocket (port); } catch (Exception ex) {ok = false; Log.debug ("не может открыть Serversocket на порту" + порт); }}} catch (Exception ex) {debug (ex.toString ()); } ishere = true; Boolean OK = TRUE; Randomaccessfile fout = null; BufferedOutputStream BOUT = NULL; Randomaccessfile fin = null; Попробуйте {if (! stens.getftppasvmode ()) {int retry = 0; while ((retry ++ <5) && (sock == null)) {try {ssock.setsotimeout (stens.connectiontimeout); sock = ssock.accept (); } catch (ioException e) {sock = null; отладка («Получил ioException, пытаясь открыть розетку!»); if (retry == 5) {debug ("соединение не удалось, попробовал 5 раз - может быть, попробуйте более высокий тайм -аут в настройках. Java"); } закончить = true; бросить E; } наконец {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 (file); fout = new randomaccessfile (файл, "rw"); fout.skipbytes ((int) f.length ()); buflen = (int) f.length (); } else {if (localfile == null) {localfile = file; } Файл f2 = новый файл (stens.apphomedir); f2.mkdirs (); Файл F = новый файл (LocalFile); if (f.exists ()) {f.delete (); } bout = new BufferedOutputStream (New FileOutputStream (localFile), settings.buffersize); }} catch (Exception ex) {debug ("Невозможно создать outputFile:" + file); ОК = ложь; ex.printstacktrace (); }} // --------------- Выгрузка , 上传 ---------------------- if (type.equals (put) || type.equals (putdir)) {if (in == null) {try {fin = new randomaccessfile (файл, "r"); if (resume) {fin.skipbytes (skiplen); } // fin = new BufferedInputStream (new FileInputStream (file)); } catch (Exception ex) {debug ("не может открыть input -file:" + "(" + ex + ")"); ОК = ложь; }} if (ok) {try {out = new BufferedOutputStream (sock.getOutputStream ()); } catch (Exception ex) {ok = false; отладка («не может получить outputStream»); } If (ok) {try {int len = skiplen; Чар Б; while (true) {int Read; if (in! = null) {read = in.read (buf); } else {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); } else {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; отладка («Ошибка: соединение данных закрыто»); con.fireprogressupdate (файл, неудачный, -1); ex.printstacktrace (); }}}}}}} catch (ioException ex) {log.debug ("Не удается подключить сокет к Serversocket"); ex.printstacktrace (); } наконец {try {if (out! = null) {out.flush (); out.close (); }} catch (Exception ex) {ex.printstackTrace (); } try {if (bout! = null) {bout.flush (); bout.close (); }} catch (Exception ex) {ex.printstackTrace (); } try {if (fout! = null) {fout.close (); }} catch (Exception ex) {ex.printstackTrace (); } попробуйте {if (in! = null &&! JustStream) {in.close (); } if (fin! = null) {fin.close (); }} catch (Exception ex) {ex.printstackTrace (); }} try {sock.close (); } catch (Exception ex) {debug (ex.toString ()); } if (! stens.getftpasvmode ()) {try {ssock.close (); } catch (Exception ex) {debug (ex.toString ()); }} закончили = true; if (ok) {con.fireprogressupdate (файл, закончен, -1); } else {con.fireProgressUpdate (файл, не удастся, -1); }} 6. Картирование порта FTP
Существует два типа подключений к данным FTP: PASV и порт. Если ваш FTP -сервер расположен во интрасети, вам нужно использовать отображение портов. Вначале я мало знал о внешнем сетевом картировании FTP, поэтому я начал принимать много обхода. Сначала я всегда думал, что с моей программой что -то не так, и потратил много времени. Я надеюсь, что в течение этого периода каждый может тратить меньше или не ненужное время и энергию во время развития.
Была статья о PCD, в которой представил метод для непосредственного доступа к интрасети. На самом деле, пока мы используем инструмент отображения портов, мы можем легко достичь цели проникновения в интрасеть. «Порт -карт» - такой инструмент. Более того стоит упомянуть, это то, что он избавится от режима командной строки и предоставляет среду работы графического интерфейса.
Чтобы заставить всех понять больше, позвольте мне сначала поговорить о принципе. Suppose there is now a LAN with the host A. In addition to the host, there is also a machine in the LAN with B. Of course, the B machine is surfing the Internet through host A. There is also a machine that can access the Internet, which is not in the same LAN as A and B. Normally, machine C can only access host A, but cannot penetrate the LAN and access B. After port mapping, when machine C accesses the specified port of host A, the "port mapper" on host A works. Он будет передавать данные на указанном порту в указанный порт другой машины в локальной сети, тем самым достигая цели доступа к интрасети. Говоря так, все понимают. Что касается того, чтобы настроить его, автор считает, что это не должно быть сложной задачей. Кроме того, в Интернете есть много таких графических объяснений. Пожалуйста, обратитесь к статьям в Интернете для настройки.
Конечно, преимущества реализации прямого доступа к интрасети очевидны. Не говоря уже о чем -либо еще, по крайней мере, ресурсы FTP полностью используются. Однако следует напомнить, что прямой доступ к интрасети может угрожать безопасности интрасети. Автор считает, что большинство друзей все еще придают значение важности безопасности хозяина, но они часто игнорируют настройки безопасности интранет -машин. После того, как вы достигли прямого доступа к интрасети, вы должны относиться к интранет -машинах как к хосту, в противном случае вся ваша сеть может быть в опасности.
Доступ к ресурсам клиентов
Политика безопасности прикладной среды Java, которая выражается объектом политики для разрешений различных ресурсов, принадлежащих различным кодам. Для того, чтобы апплет (или приложение, работающее в разделе SecurityManager) для выполнения защищенного поведения, такого как чтение и написание файлов, Applet (или Java -приложения) должен получить разрешение на эту операцию, и файл политики безопасности используется для реализации этих разрешений.
Объект политики может иметь несколько организаций, хотя только один может работать в любое время. Установленный в настоящее время объект политики может быть получен в программе, вызывая метод GetPolicy или изменившись, вызывая метод SetPolicy. Объект политики оценивает всю политику, возвращая соответствующий объект разрешений, в котором подробно описывается, какой код может получить доступ к каким ресурсам. Файлы политики могут храниться в неформатированных файлах ASCII или в двоичных файлах или базах данных класса политики. В этой статье обсуждается форма неформатированных файлов ASCII.
В реальном использовании нам не нужно вручную писать такие сложные файлы java.policy, особенно когда мы не используем цифровые подписи. В настоящее время мы можем полностью учиться из готовых файлов c:/program/java/jre1.5.0_12/lib/security/java.policy, предоставленный нам JRE, и внести соответствующие изменения в соответствии с нашими потребностями. Эта статья напишет файл политики безопасности для ситуации, когда цифровые подписи не используются. Ниже приведен полный файл java.policy, используемый под Windows NT/XP. В файле цель каждой записи «разрешения» объясняется отдельно с использованием комментариев. Конечно, различные программы могут иметь разные требования для прав доступа к ресурсам и могут быть скорректированы и выбраны в соответствии с потребностями проекта.
Grant {// разрешение на «читать» систему и разрешение на каталог пользователей java.util.propertypermission «user.dir», «reade»; разрешение java.util.propertypermission "user.home", "читать"; разрешение java.util.propertypermission "java.home", "читать"; разрешение java.util.propertypermission "java.home", "читать"; разрешение java.util.propertypermission "java.class.pat", "читать"; разрешение 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} $ {/}. jmstudiocfg", "write"; разрешение java.net.socketpermission "*", "подключиться, принять"; разрешение java.io.filepermission "c:/winnt/temp/*", "write"; разрешение java.io.filepermission "c:/winnt/temp/*", "delete"; разрешение java.awt.awtpermission "showwindowwithoutwarningbanner"; разрешение javax.sound.sampled.audiopermission "record"; // // Различные разрешения на операционные порты сокетов разрешение java.net.socketpermission "-", "принять"; разрешение java.net.socketpermission "-", "connect"; разрешение java.net.socketpermission "-", "Resolve"; разрешение java.security.allpermission; }; Предоставление подписано "saili" {разрешение java.net.socketpermission "*: 1024-65535", "Подключите, принимает, разрешите"; разрешение java.net.socketpermission "*: 80", "Connect"; разрешение java.net.socketpermission "-", "слушать, принимать, подключиться, слушать, решить", подписание "ganja"; разрешение java.net.socketpermission "-", "принять"; разрешение java.net.socketpermission "-", "connect"; разрешение java.net.socketpermission "-", "Resolve"; разрешение java.security.allpermission; }; В этом проекте, чтобы сделать его более удобным и простым в использовании настройки пользователя клиента, приведенный выше файл превращается в небольшую программу с использованием VB или C#. Затем объедините JRE и некоторых бывших в пакет EXE. После установки JRE этот апплет отвечает за поиск пути установки JRE в операционной системе и записание файла Java.policy в программе, чтобы перезаписать исходный файл. Таким образом, пользователю нужно только установить файл EXE, который упрощает количество операций установки.
7. Сервер обратного вызова апплета
Способность JavaScript и апплета общаться друг с другом приносит нам много удобства. Java и JavaScript дополняют друг друга для разработки более совершенных веб -приложений. B/S может в полной мере использовать преимущества Java, обеспечивая больше опыта в сети и облегчая его для пользователей. Автор использует больше приложений, разработанных компонентами Swing для реализации архитектуры B/S с использованием апплета, которая может полностью продемонстрировать преимущества качающих компонентов, облегчить обновление и поддержание системы; Кроме того, в рамках веб -сайта иногда клиент должен использовать локальные аппаратные ресурсы. Я знаю, что он реализован через апплет и вызывает Java API через апплет. Давайте посмотрим на то, как JavaScript и Applet подробно общаются?
1. Javascript доступ к апплету
<applet name = "appletName" .... /// JavaScript Accesses Properties.
window.document.appletname.appletfield (свойство должно быть общедоступным, "window.document." Можно также записано без написания) // Доступ JavaScript к методу апплета.
window.document.appletname.appletmethod (метод должен быть общедоступным, "window.document." Можно также записать без письма).
2. Applet Access к JavaScript
Live Connect предоставляет интерфейс между Java и JavaScript, который позволяет использовать JavaScript в апплетах Java.
Вам нужно использовать пакет 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 (string callbackjavascript) {jsobject window = jsobject.getWindow (this); // Получить рукоятку окна JavaScript и обратитесь к текущему окну документа jsobject document = (jsobject) window.getmember ("Document"); form = (jsobject) doc.getmember ("textform"); // Доступ к форме JavaScript объект TextField = (jsobject) form.getmember ("textfield"); Доступ к тексту JavaScript Text Text = (String) Textfield.getMember ("value"); // Получить значение текстовой области // Вызов метода javaScript () window.eval ("alert (/" Это предупреждение происходит от java!/")"); window.call (callbackjavascript, null); // Параметры представлены в форме массива. }8. Эффект работы
1. Загрузить
(1). Начать загрузку
(2). Загрузка
(3). Загрузка
(4). Загрузить успешно
2. Скачать
(1) Сохранить путь загрузки файла
(2) Загрузка
(3) Загрузка
(4) Скачать успешно
9. Резюме
В этой статье автор объяснит решение проблемы загрузки и загрузки в реальных проектах и использует протокол FTP для достижения пакетной, основной загрузки и загрузки больших файлов. В то же время он может получить доступ к локальным ресурсам в клиенте с помощью технологии апплета. Предварительное обсуждение было проведено о некоторых фактических функциях, с которыми часто сталкиваются люди, такие как панель прогресса, непрерывная передача, точка перерыва, внутреннее отображение FTP и внешнее сопоставление сети и т. Д. Это основное применение автора на основе некоторых клиентских библиотек FTP Java. Я надеюсь, что это будет ссылка для читателей. Добавьте некоторые из этих незаконченных вопросов. Есть также некоторое содержимое, которое является относительно простым и имеет описания или примеры онлайн, которые здесь не указаны. Например, как FTP может создавать службы FTP на серверном программном обеспечении Serv-U, как апплеты встроены в страницы JSP и методы доставки параметров, и как апплеты запускаются под Eclipse или NetBeans, из-за ограничений пространства нет подробного описания. Пожалуйста, обратитесь к примерам или другим справочным материалам в Интернете.
Адрес загрузки: http://xiazai.vevb.com/201608/yuanma/ftptransfer(vevb.com).rar
Примечание. Учитывая проблему с авторским правом, файл класса Java не был отправлен, но я думаю, что все уже знакомы с тем, как восстановить такой файл JAR в файл Java, хаха.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.