Les exemples de cet article partagent avec vous le processus de Java à l'aide de socket pour créer un téléchargeur et un code connexe pour votre référence. Le contenu spécifique est le suivant
1. Tout d'abord, établissez un serveur pour traiter les informations et transférer des fichiers vers le client (ordinateur)
J'ai allumé un wifi à l'aide de mon ordinateur, puis connecté au téléphone et utilisé un scoket pour le transmettre.
Le serveur doit être modifié en fonction de votre situation réelle. Le port peut également être modifié à volonté 0 ~ 65535, essayez d'en choisir un plus grand
Importer java.io.BufferedInputStream; Importer Java.io.BufferedOutputStream; Importer Java.io.BuffereDader; Importer Java.io.BuffereDreader; Importer Java.io.BufferedWriter; Importer Java.io.file; Importer Java.io.fileinputStreamReder; Importer Java.ioftrestrestre; java.io.printwriter; Importer java.net.serversocket; Importer java.net.socket; / ** * Testez le client Android et le serveur PC interagira via le serveur de socket: Recevez des informations client et renvoyez-la au client * * @author Ameyume * * / Public Class Server implémente le serveur final Runnable {// Définit les informations IP et port pour le transmission publique STATIQUE STATIQUE STATIQU "192.168.155.1"; // Définir le port 9888 PORT PUBLIC STATIQUE FINAL INT SERVERPORT = 9888; // Définissez le fichier Fichier privé Fichier = NULL; public static void main (String [] args) {// Créez la méthode d'appel pour appeler le thread pour effectuer du thread de transmission DesktopserverThread = new Thread (new Server ()); DesktopserverThread.start (); } public void run () {try {System.out.println ("s: connecting ... 9888"); // Créer un socket serversocket SERVERSocket = new serversocket (serverport); while (true) {// attendez d'accepter les demandes du client socket client = serversocket.accept (); System.out.println ("S: Receiving ... 9888"); essayez {// accepter les informations du client BufferedReader dans = new BufferedReader (new InputStreamReader (client.getInputStream ())); System.out.println ("S: recevoir des informations sur les clients"); // Lire la chaîne d'informations du client str = in.readline (); String str1 = str.substring (0,2); String str2 = str.substring (2); System.out.println (STR); // Recherchez le fichier correspondant en fonction de la demande du client et transmettez la valeur de taille du fichier sur if (str.equals ("file_size")) {// Définissez le fichier que vous souhaitez transférer (j'ai écrit un fichier sous e disque ici) file = nouveau fichier ("e: // un fichier"); // INPUT Stream FileInputStream fis = new FileInputStream (fichier); // Stream de sortie BufferedInputStream Bis = new BufferedInputStream (FIS); // Calculez la taille du fichier à transférer int sum = bis.available (); // Convertir la taille du fichier du type int en une chaîne String s = string.valueof (sum); System.out.println (s); // Créez le flux de sortie pour envoyer des informations de taille de fichier printwriter out = new PrintWriter (new BufferedWriter (new OutputStreamWriter (client.getOutputStream ())), true); // Envoyer des informations sur la taille des fichiers Out.println (s); // Fermer Stream Out.flush (); bis.close (); } else if (str1.equals ("ok")) {int a = Integer.ParseInt (str2); // Une fois que le client a reçu la valeur de taille du fichier, il transmet le fichier en fonction du "OK" envoyé par le client tampondoutputStream bos = new BufferedOutputStream (client.getOutputStream ()); System.out.println ("S: Start Transfer"); // Démarrer le transfert if (true) {// Stream FileInputStream fis = new FileInputStream (fichier); // ignore les octets qui ont été transférés avant fis.skip (a); // Buffer Input Stream BufferedInputStream Bis = new BufferedInputStream (FIS); int t = -1; while ((t = bis.read ())> = 0) {bos.write (t); } String s = "transmis"; // Close Stream bos.flush (); bis.close (); bos.close (); // serversocket.close (); System.out.println ("S: reçu: '" + s + "'"); }} else {System.out .println ("pas récepteur de client!"); }} catch (exception e) {System.out.println ("s: error 1"); e.printStackTrace (); } enfin {client.close (); System.out.println ("S: Done."); }}} catch (exception e) {System.out.println ("s: error 2"); e.printStackTrace (); }}} 2. Créer un autre client, j'utilise mainactivity.java écrit en Android (je l'exécute sur mon téléphone)
package com.xhy.zz; import Android.app.activity; import android.content.intent; import android.os.bundle; import android.os.handler; import android.os.mesage; import android.view.view; import android.view.vie Mestilateur statique public MyHandler; // Définir l'intention privée de l'intention privée; // Obtenez le contrôle Private TextView Text_name; TextView privé text_percent; bouton privé btn_start; bouton privé btn_stop; // Fichier Afficher TextView Private Text_sel_file; @Override Protected void onCreate (bundle SavedInStanceState) {// TODO Méthode générée automatique Stub 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 = (bouton) findViewByid (r.id.btn_start); btn_stop = (bouton) findViewByid (r.id.btn_stop); // Renvoie des informations sur le bouton un, affichant Progress MyHandler = new Handler () {@Override public void handleMessage (message msg) {super.handleMessage (msg); if (msg.what == 0x0001) {bundle data = msg.getData (); String str = data.getString ("valeur"); text_percent.setText (str); }}}}; // Insérer HelloService Intent = nouvelle intention (this, downservice.class); // Définissez le bouton Démarrer l'événement BTN_START.SetOnClickListener (new onClickListener () {@Override public void onClick (View v) {// Démarrer le service starterService (intention);}}); // Définissez le bouton d'arrêt cliquez sur l'événement btn_stop.setOnClickListener (new onClickListener () {@Override public void onClick (View v) {// Closez le service stopService (intention);}}); } / *** * La méthode de rappel sera automatiquement appelée par le système une fois la valeur de retour renvoyée * / @Override Protected void OnActivityResult (int de demande, INT ResultCode, INTING INTING) {super.onactivityResult (requestCode, resultCode, Intention); // Si le code de demande est 0 // et que le code de résultat renvoyé est 1 // l'activité demandée peut renvoyer plusieurs codes de résultats if (requestCode == 0 && resultCode == 1) {// retirer les données de data bundle = Intent.getExtras (); String str = data.getString ("fichiers"); // affiche des données text_sel_file.settext (str); }}} 3. Fichier 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: Layout_Height = "Match_parent" et orientation = "Android" Android " > <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: Sayout_Width = "160DP" Android: Layout_Height = "wrap_Content" Android: Layout_gravity = "Center_Vertical" Android: Text = "1" /> <TextView Android: ID = "@ + id / text_percent" Android: Layout_Width = "50DP" Android: "Centre_Height =" Wrap_Content "Android: Layout_Gravity =" Centre_VERTICAL " Android: Layout_Marginleft = "20DP" Android: text = "0%" /> <linearlayout Android: Layout_Width = "wrap_content" Android: Layout_Height = "wrap_content" Android: Layout_Marginleft = "20DP" Android: orientation = "Vertical"> <Button Android: Android: Layout_Width = "wrap_content" Android: Layout_Height = "Wrap_Content" Android: Text = "START" /> <Button Android: id = "@ + id / btn_stop" Android: Layout_Width = "Wrap_Content" Android: Layout_Height = "WINCE_CONTENT" Android: Text = "Stop" /> </ linearlayout> </ Linearlayout> </ linearlayout> </ linearlayout>
4.DownService est utilisé pour permettre aux threads d'exécuter des téléchargements en arrière-plan
package com.xhy.zz; import java.io.bufferedinputstream; import java.io.buffereDeader; import java.io.buffereDaDer; import java.io.bufferedwriter; import java.io.inputStreamreDer; java.io.printwriter; Importer java.net.inetaddress; import java.net.socket; import java.net.unknownhostException; import android.app.service; import android.content.context; import android.content.intent; import android.content.sharedpreerences; import android.os.bundle; import android.os.os. android.os.ibinder; import Android.os.Message; import Android.util.log; public class Downservice étend le service {private static final string tag = "socket_android"; // Nom de fichier de l'opération de mécanisme de préférence publique Public Static Final String preference_name = "Downservice"; // Mode de fonctionnement du mécanisme Prefercece public static int mode = context.mode_private; // Thread Private Thread WorkThread; // Définir le nom de filen Private String filename = "file"; // Numéro de port private int port = 9888; Boolean privé isStop = false; / *** * Méthodes qui doivent être implémentées * / @Override public Ibinder rebind (intention intention) {return null; } @Override public void onCreate () {super.Oncreate (); } @Override public int onStartCommand (INTING INTING, int int draps, int startId) {log.v ("tcp", nom de fichier); // Créer la méthode de transmission Runnable Backgroundwork = new Runnable () {@Override public void run () {// setttitut ("Test Socket Connection"); Douille à douille = null; Socket socket1 = null; Essayez {/ * * Spécifiez l'adresse IP du serveur, cette adresse est l'adresse LAN. Si vous utilisez WiFi pour surfer sur Internet, il s'agit de l'adresse IP WiFi du PC * L'adresse IP que vous avez visionnée dans IPConfig est la suivante: Sethernet Adapter Wireless Network Connection: * suffixe DNS spécifique à la connexion. : Adresse IP. . . *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Utilisez l'IP et le port du serveur pour créer un objet Socket et envoyez une demande au serveur pour obtenir la valeur de taille de fichier Socket1 = new socket (serverAddr, port); String message = "--- test_socket_android ---"; Log.D ("TCP", "C: Envoi: '" + Message + "'"); // Envoyez les informations sur le serveur via cet objet PrintWriter out = new PrintWriter (new BufferedWriter (new OutputStreamWriter (socket1.getOutputStream ())), true); // Envoyez le contenu entré par l'utilisateur sur le serveur out.println ("file_size"); out.flush (); // reçoit des informations de serveur BufferedReader dans = new BufferedReader (new InputStreamReader (socket1.getInputStream ())); // Obtenez la chaîne de taille de fichier str1 = in.readline (); Log.D ("TCP", STR1); // Convertir la taille du fichier en int-type int sum = Integer.ParseInt (str1); Log.D ("TCP", STR1); // Fermer le flux d'entrée dans.close (); SharedPreferences SharedPreferences = getSharedPreferences (préférence_name, mode); SharedPreferences.Editor Editor = SharedPreferences .Edit (); // Répondez les octets transmis int pre = sharedpreferences.getInt ("Downservice", 0); int _pre = pré; // Convertissez-le en une chaîne pour envoyer au serveur String s = string.valueof (_pre); // Utilisez l'IP et le port du serveur pour établir un objet Socket et envoyer à nouveau une demande au serveur pour obtenir le contenu de fichier socket = new socket (serverAddr, port); // Envoyez la demande de caractère au serveur pour obtenir le fichier printwriter out1 = new printwriter (new BufferedWriter (new OutputStreamWriter (socket.getOutputStream ())), true); out1.println ("ok" + s); out1.flush (); out.close (); // Définissez le flux d'entrée BufferedInputStream bis = new BufferedInputStream (socket.getInputStream ()); String file1 = nom de fichier; File de chaîne; // Déterminez si le SDCARD est inséré dans le téléphone, insérez le fichier dans la carte mémoire if (Environment.getExternalStorAgestate (). Equals (Environment.Media_Mounted)) {file sdcard = Environment .getExternalStorageDirectory (); // fichier de fichier de définition de la carte SD = sdcard.getCanonicalFile () + "/" + file1; // Définir le flux de sortie du fichier fileoutputStream fos = new FileOutputStream (file, true); essayez {int t = -1; Int téléchargé = pré; // définir le nombre d'octets par octet de transmission [] buff = nouvel octet [8192]; Log.i ("sum", sum + ""); // Commencez à écrire le fichier serveur sur la carte SD du téléphone mobile while ((t = bis.read (buff))! = -1) {if (isStop == true) {break; } fos.write (buff, 0, t); téléchargé + = t; // Stockage The Transmission Progress Editor.puntInt ("Downservice", téléchargé); editor.Commit (); // Lorsque la transmission est terminée, réinitialisez les informations stockées si (téléchargé == sum) {editor.puntInt ("Downservice", 0); editor.Commit (); } // Obtenez la progression du float de transfert de fichiers wb = ((téléchargé * 100) / (float) sum); int wi = (int) wb; System.out.println (téléchargé); String str = string.valueof (wi) + "%"; // Envoyez les progrès de transfert de fichiers vers BaseActivity pour afficher au message de l'utilisateur msg = new message (); // Générer le message // Générer le message msg.what = 0x0001; // Définir le type de message // Générer des données de bundle de données de données = new pundle (); data.putString ("valeur", str); msg.setData (données); // Utilisez Handler pour envoyer des messages mainactivity.myhandler.sendMessage (msg); } // Fermez le flux d'entrée et de sortie bis.close (); fos.flush (); fos.close (); } catch (exception e) {bis.close (); fos.flush (); fos.close (); }} Log.d (tag, "From Server: 'Reçu" + "'"); } catch (UnknownHostException e) {log.e (tag, "192.168.155.1 est uncle serveur!"); } catch (exception e) {e.printStackTrace (); } enfin {try {socket.close (); } catch (exception e) {e.printStackTrace (); }}}}}}; workthread = nouveau thread (backgroundwork); // La méthode Isalive est utilisée pour déterminer si le thread WorkThread est activé si (! workthread.isalive ()) {// générer un nouveau thread workthread.start (); Log.v ("ServiceLife", "Thread commence à fonctionner"); } else {log.v ("workthread", "thread a été appelé"); } return start_sticky; } @Override public void onDestroy () {super.ondestroy (); // Interrompre le thread à l'aide d'interruption isStop = true; Log.v ("ServiceLife", "La méthode ondestroy est appelée"); }} 5. Enfin, n'oubliez pas d'enregistrer AndroidManifest.xml
<use-permission Android: name = "android.permission.internet" /> <using-permission Android: name = "android.permission.mount_unmount_filesystems"> </ use-permission> <use-permission Android: name = "Android. Android: name = ". Downservice"> </ service>
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.