Примеры в этой статье делятся с вами процессом Java с использованием сокета для создания загрузчика и связанного кода для вашей ссылки. Конкретный контент заключается в следующем
1. Во -первых, установите сервер для обработки информации и передачи файлов в клиент (компьютер)
Я включил Wi -Fi, используя свой компьютер, а затем подключился к телефону и использовал Scoket для его передачи.
Serverip должен быть изменен в соответствии с вашей реальной ситуацией. Порт также может быть изменен при желании 0 ~ 65535, попробуйте выбрать более крупный
Импорт java.io.bufferedinptstream; import java.io.bufferedOutputStream; импорт java.io.bufferedReader; импорт java.io.bufferedReader; импорт java.io.bufferedWriter; импорт java.io.file; import java.io.fileinputStreameReamer; импорт java.io. java.io.printwriter; import java.net.serversocket; import java.net.socket;/** * Проверка клиента и ПК -сервер Android взаимодействует с помощью сервера Socket: получить информацию о клиенте и отправить ее обратно клиенту * * @author Ameyume * */Public Class Server Server, выполняемый {// определять информацию IP и порт для передачи Specility STATIC STATIC SERVERIP. // Определите 9888 Port Public Static Final int ServerPort = 9888; // Определите файл Private File file = null; public static void main (string [] args) {// Создать метод вызова потока для выполнения потока передачи DesktopserThread = new Thread (New Server ()); Desktopserverthread.start (); } public void run () {try {System.out.println ("s: подключение ... 9888"); // Создать Socket Serversocket Serversocket = new Serversocket (ServerPort); while (true) {// ждать принятия запросов клиента Client = serversocket.accep (); System.out.println ("S: получение ... 9888"); try {// Принять информацию о клиенте BufferedReader in = new BufferedReader (New InputStreamReader (client.getInputStream ())); System.out.println ("s: получение информации о клиенте"); // Читать информацию о клиенте string str = in.readline (); String str1 = str.substring (0,2); String str2 = str.substring (2); System.out.println (str); // Найти соответствующий файл в соответствии с запросом клиента и передайте значение размера файла over if (str.equals ("file_size")) {// Определить файл, который вы хотите перенести (я написал файл под E Disk здесь) file = new File ("e: // файл"); // входной потоковой файл fileInputStream fis = new FileInputStream (file); // выходной поток буферизатор inputStream bis = new BufferedInputStream (FIS); // Рассчитайте размер файла, который будет передаваться int sum = bis.available (); // конвертировать размер файла типа int в строку строки s = string.valueof (sum); System.out.println (s); // Создать выходной поток для отправки информации о размере файла printwriter = new PrintWriter (новый BufferedWriter (новый outputStreamWriter (client.getOutputStream ())), true); // Отправить информацию о размере файла out.println (s); // закрыть stream Out.flush (); bis.close (); } else if (str1.equals ("ok")) {int a = integer.parseint (str2); // После того, как клиент получает значение размера файла, он передает файл в соответствии с «OK», отправленным клиентом BufferedOutputStream BOS = New BufferedOutputStream (client.getOutputStream ()); System.out.println ("s: Start Transfer"); // start Transfer if (true) {// input stream fileInputStream fis = new FileInputStream (file); // пропустить байты, которые были перенесены до fis.skip (a); // буферный входной поток буферизатор inputStream bis = new BufferedInputStream (FIS); int t = -1; while ((t = bis.read ())> = 0) {bos.write (t); } String s = "передается"; // закрыть потоку bos.flush (); bis.close (); bos.close (); // serversocket.close (); System.out.println ("s: получен: '" + s + "'"); }} else {System.out .println ("Не получатель ничего от клиента!"); }} catch (Exception e) {System.out.println ("s: ошибка 1"); e.printstacktrace (); } наконец {client.close (); System.out.println ("s: Dode."); }}} catch (Exception e) {System.out.println ("s: ошибка 2"); e.printstacktrace (); }}} 2. Создайте другого клиента, я использую mainActivity.java, написанный в Android (я запускаю его на своем телефоне)
Пакет com.xhy.zz; import android.app.activity; import android.content.intent; import android.os.bundle; import android.os.handler; import android.os.message; import android.view.view; import android.view.yslicklistener; import.widget.button.butence. // Определите обработчик общественного статического обработчика MyHandler; // определить намерение частного намерения; // Получить элемент управления частным текстовым видео Text_name; Private TextView Text_percent; Приватная кнопка btn_start; Приватная кнопка btn_stop; // отображение файла private TextView Text_sel_file; @Override Protected void Oncreate (Bundle SavedInstanceState) {// TODO Автогенерированный метод Super.oncreate (SaveDinstancestate); setContentView (r.layout.activity_main); text_name = (textview) findviewbyid (r.id.text_name); text_percent = (textview) findviewbyid (r.id.text_percent); btn_start = (кнопка) findviewbyid (r.id.btn_start); btn_stop = (кнопка) findviewbyid (r.id.btn_stop); // вернуть информацию о кнопке One, отображая прогресс myHandler = new Handler () {@Override public void handlemessage (сообщение msg) {super.handlemessage (msg); if (msg.what == 0x0001) {bundle Data = msg.getData (); String str = data.getString ("value"); text_percent.settext (str); }}}}; // вставить HelloService intent = новое намерение (это, downservice.class); // Установить кнопку «Пуск» нажмите на событие btn_start.setonclicklistener (new onclicklistener () {@override public void onclick (view v) {// Запуск Service Startservice (intent);}}); // Установить кнопку «Стоп» Нажмите на событие btn_stop.setonclicklistener (new onclicklistener () {@override public void onclick (view v) {// Закрыть Service StopService (Intent);}}); } / ****Метод обратного вызова будет автоматически вызван системой после возвращения возвращаемого значения* / @@Override Protected void onActivityResult (int requestCode, int resultCode, намерение) {super.OnactivityResult (requestCode, resultCode, Intent); // Если код запроса равен 0 //, а возвращаемый код результата - 1 // Запрошенное действие может вернуть несколько кодов результатов, если (requestCode == 0 && resultCode == 1) {// Установите Data Data Data Data = intent.getExtras (); String str = data.getString ("files"); // Показать данные text_sel_file.settext (str); }}} 3. Activity_main.xml файл
<? xml version = "1.0" Encoding = "UTF-8"?> <linearlayout xmlns: android = "http://schemas.android.com/apk/res/android" Android: Layout_width = "match_parent" Android: Layout_Height = "match_parent": android: mayout_healight "match_healight_healight_healight_healight_healight_healight_healight_healight_healight_healight_healight_he-hailout_height =" match_parent ": layout_healight". Android: Orientation = "vertical"> <linearlayout android: layout_width = "wrap_content" Android: Layout_height = "wrap_content" Android: Layout_margintop = "20DP" Android: Orientation = "horizontal"> <TextView Android: ID = "@+ID/Text_NAME" AndRoid: LAYIDTHTAL "> <TextView"@+ID/Text_NAMOUT: LAYIDTHTAL ". Android: layout_height = "wrap_content" Android: layout_gravity = "center_vertical" Android: Text = "1" /> <TextView Android: id = "@+id /text_percent" Android: layout_width = "50dp" Android: layout_height = "rap_content" android: layout_gravity = "mayout_height =" wroud_content ": layout_gravity =" mayout_height = " Android: layout_marginleft = "20dp" Android: Text = "0%"/> <linearlayout android: layout_width = "wrap_content" Android: Layout_Height = "wrap_content" Android: Layout_marginleft = "20DP" Android: Oniodation = "vertical"> <Trode и IDPARTICRAT Android: layout_width = "wrap_content" Android: layout_height = "wrap_content" Android: Text = "Start" /> <Button Android: id = "@+id /btn_stop" Android: layout_width = "wroud_content" Android: Layout_Height = "wry_content": "rav_content" android: layout_height = "wrip_content". </Linearlayout> </linearlayout> </linearlayout>
4. DownService используется для включения потоков выполнять загрузки в фоновом режиме.
Пакет com.xhy.zz; импорт java.io.bufferedinptstream; import java.io.bufferedReader; импорт java.io.bufferedReader; импорт java.io.bufferedwart java.io.printwriter; import java.net.inetadress; импорт java.net.socket; импорт java.net.unknownhostexception; импорт android.app.service; импорт android.content.context; импорт android.content.intent; импорт android. Android.os.ibinder; Import Android.os.message; Import Android.util.log; открытый класс DownService Extends Service {Private Static Final String Tag = "socket_android"; // Имя файла механизма предпочтения // Режим работы предпочтительного механизма public static int mode = context.mode_private; // потока частной потоки рабочая лента; // определить имя файла private String filename = "file"; // номер порта частный порт int = 9888; Частный логический isstop = false; / ****Методы, которые должны быть реализованы*/ @override public ibinder onbind (намерение) {return null; } @Override public void onCreate () {super.oncreate (); } @Override public int onstartCommand (намерение, int flags, int startid) {log.v ("tcp", имя файла); // Создать метод передачи runnable founalwork = new Runnable () {@Override public void run () {// cettitle ("Contance Connection"); Сокет сокет = null; Сокет1 = null; Try { / * * Укажите IP -адрес сервера, этот адрес является адресом LAN. Если вы используете WiFi для серфинга в Интернете, это IP-адрес WiFi на ПК * IP-адрес, который вы просмотрели в iPconfig, следующим образом: Athernet Adapter Connection Wireless Network: * Суффикс DNS, специфичный для подключения. : IP -адрес. Полем Полем *. Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Полем Используйте IP и порт сервера для создания объекта сокета, и отправьте запрос на сервер, чтобы получить значение значения размера файла1 = новый сокет (ServerAddr, Port); String message = "--- test_socket_android ---"; Log.d ("tcp", "c: отправка: '" + message + "'"); // Отправить информацию на сервер через этот объект printwriter out = new PrintWriter (новый BufferedWriter (новый outputStreamWriter (socket1.getOutputStream ()), true); // Отправить контент, введенный пользователем на сервер out.println ("file_size"); out.flush (); // получение информации о сервере BufferedReader in = new BufferedReader (New InputStreamReader (socket1.getInputStream ())); // Получить строку размера файла str1 = in.readline (); Log.d ("tcp", str1); // конвертировать размер файла в int-тип int sum = integer.parseint (str1); Log.d ("tcp", str1); // закрыть поток ввода in.close (); Sharedpreferences sharedpreferences = getSharedPreferences (preference_name, mode); Sharedpreferences.editor editor = sharedpreferences .edit (); // Извлекать переданные байты int pre = sharedpreferences.getint ("Downervice", 0); int _pre = pre; // конвертировать его в строку для отправки в строку сервера s = string.valueof (_pre); // Используйте IP и порт сервера для создания объекта сокета и снова отправить запрос на сервер, чтобы получить сокет файла сокета = New Socket (ServerAddr, Port); // Отправить запрос символа на сервер, чтобы получить файл printwriter out1 = new PrintWriter (новый BufferedWriter (новый outputStreamWriter (socket.getOutputStream ()), true); out1.println ("ok"+s); out1.flush (); out.close (); // Определите входной поток BufferedInputStream bis = new BufferedInputStream (socket.getInputStream ()); String file1 = имя файла; Строковый файл; // Определите, вставлен ли SDCARD в телефон, вставьте файл в карту памяти if (Environment.getExternalStorageState (). Equals (Environment.Media_Mountted)) {file sdcard = Environment .getExternalStorAgedIrectory (); // файл определения SD -карты файл = sdcard.getCanonicalFile () + "/" + file1; // Определить выходной поток файла FileOutputStream fos = new FileOutputStream (file, true); попробуйте {int t = -1; int скачать = pre; // Определите количество байтов на байт передачи [] buff = new Byte [8192]; Log.i ("sum", sum + ""); // Начните записывать файл сервера на SD -карту мобильного телефона Whe ((t = bis.read (buff))! = -1) {if (isstop == true) {break; } fos.write (buff, 0, t); загружен += t; // хранение редактора прогресса передачи. PUPTINT («Downservice», загружен); editor.commit (); // Когда трансмиссия завершена, сбросьте хранимую информацию, если (скачано == sum) {editor.putint ("Downservice", 0); editor.commit (); } // Получить прогресс переноса файла float wb = (((скачанный * 100) / (float) sum); int wi = (int) wb; System.out.println (скачанный); String str = string.valueof (wi) + "%"; // Отправить прогресс передачи файла в базиактивность, чтобы отобразить пользовательское сообщение msg = new Message (); // генерировать сообщение // Сгенерировать сообщение MSG.What = 0x0001; // Установить тип сообщения // Создание пакета переноса данных DATA = NEW BUNDLE (); data.putString ("value", str); msg.setData (данные); // Использовать обработчик для отправки сообщений mainActivity.myhandler.sendmessage (msg); } // Закрыть входной и выходной поток bis.close (); fos.flush (); fos.close (); } catch (Exception e) {bis.close (); fos.flush (); fos.close (); }} Log.d (Tag, "from Server: 'получил" + "'"); } catch (Unknownhostexception e) {log.e (TAG, "192.168.155.1 - это Дядя Сервер!"); } catch (Exception e) {e.printstackTrace (); } наконец {try {socket.close (); } catch (Exception e) {e.printstackTrace (); }}}}}}; horkthread = новая поток (фоновая работа); // метод ISALIVE используется для определения того, включен ли поток рабочей потоки if (! horkthread.isalive ()) {// генерировать новую потоку hableread.start (); Log.v («ServiceLife», «Поток начинает работать»); } else {log.v ("hablyread", "поток был назван"); } return start_sticky; } @Override public void ondestroy () {super.ondestroy (); // прервать поток, используя прерывание isstop = true; Log.v («ServiceLife», «метод Ondestroy» называется "); }} 5. Наконец, не забудьте зарегистрировать AndroidManifest.xml
<users-permission android: name = "android.permission.internet"/> <users-permission android: name = "android.permission.mount_unmount_filesystems"> </users-permission> <users-permission android: name = "android.permission.write_external_storage"> </usiser-permission> indirod: "android. > </service>
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.