Contoh -contoh dalam artikel ini berbagi dengan Anda proses java menggunakan soket untuk membuat pengunduh dan kode terkait untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
1. Pertama, buat server untuk memproses informasi dan mentransfer file ke klien (komputer)
Saya menyalakan wifi menggunakan komputer saya, dan kemudian terhubung ke telepon dan menggunakan scoket untuk mengirimkannya.
ServerIP harus diubah sesuai dengan situasi Anda yang sebenarnya. Port juga dapat diubah pada 0 ~ 65535, cobalah untuk memilih yang lebih besar
Impor java.io.bufferedInputStream; import java.io.bufferedoutputstream; impor java.io.bufferedreader; impor java.io.bufferedreader; impor java.io.bufferedwriter; import java.file; impor java.io.fileinputerwriter; java.io.printwriter; import java.net.serversocket; impor java.net.socket;/** * Uji klien android dan server PC berinteraksi melalui server server soket: menerima informasi klien dan mengirimkannya kembali ke klien * * @Author Ameyume * */Server Public Kelas Public mengimplementasikan runnable {// define the ip dan @Author Ameyume */Public Server Public Implements Runnable {// define the ip and the ip dan @Author Ameyume */Public Class Server mengimplementasikan runnable {// define the ip and the ip and the ip dan @Author Ameyume */Public Class Server mengimplementasikan runnable {// define the ip and the ip and the ip and the portation information foratic foratic forational "192.168.155.1"; // Tentukan 9888 port port static final int serverport = 9888; // Tentukan file file pribadi file = null; public static void main (string [] args) {// Buat metode untuk memanggil utas untuk melakukan thread transmisi desktopserverthread = utas baru (server baru ()); desktopserverthread.start (); } public void run () {coba {System.out.println ("s: Connecting ... 9888"); // Buat server socket serversocket = server baru (serverport); while (true) {// tunggu untuk menerima permintaan klien socket client = serversocket.accept (); System.out.println ("s: menerima ... 9888"); Coba {// terima informasi klien BufferedReader di = BufferedReader baru (inputStreamReader baru (client.getInputStream ())); System.out.println ("S: Terima informasi klien"); // Baca Informasi Klien String str = in.readline (); String str1 = str.substring (0,2); String str2 = str.substring (2); System.out.println (str); // Temukan file yang sesuai sesuai dengan permintaan klien dan lewati nilai ukuran file lebih dari if (str.equals ("file_size")) {// Tentukan file yang ingin Anda transfer (saya menulis file di bawah E disk di sini) file = file baru ("e: // file"); // input aliran fileInputStream fis = new FileInputStream (file); // aliran output bufferedInputStream bis = new bufferedInputStream (FIS); // Hitung ukuran file yang akan ditransfer int sum = bis.available (); // Konversi ukuran file tipe int menjadi string string s = string.valueof (sum); System.out.println (s); // Buat aliran output untuk mengirim informasi ukuran file printwriter out = printwriter baru (BufferedWriter baru (outputStreamWriter baru (client.getoutputStream ()), true); // Kirim informasi ukuran file out.println (s); // tutup stream out.flush (); bis.close (); } else if (str1.equals ("ok")) {int a = integer.parseint (str2); // Setelah klien menerima nilai ukuran file, ia melewati file lebih sesuai dengan "OK" yang dikirim oleh klien bufferedoutputStream bos = baru bufferedOutputStream (client.getoutputStream ()); System.out.println ("S: Mulai Transfer"); // Mulai transfer if (true) {// input aliran fileInputStream fis = new fileInputStream (file); // Lewati byte yang telah ditransfer sebelum fis.skip (a); // Buffer Input Stream BufferedInputStream Bis = New BufferedInputStream (FIS); int t = -1; while ((t = bis.read ())> = 0) {bos.write (t); } String s = "ditransmisikan"; // tutup aliran bos.flush (); bis.close (); bos.close (); // serversocket.close (); System.out.println ("s: diterima: '" + s + "'"); }} else {System.out .println ("Bukan penerima apapun dari klien!"); }} catch (Exception e) {System.out.println ("s: error 1"); e.printstacktrace (); } akhirnya {client.close (); System.out.println ("S: Done."); }}} catch (Exception e) {System.out.println ("s: error 2"); e.printstacktrace (); }}} 2. Buat klien lain, saya menggunakan MainActivity.java yang ditulis di Android (saya menjalankannya di ponsel saya)
Paket 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; impor public.view.onClickLister; impor dan public.widget.bidget.bidget. {// Tentukan pawang public handler myhandler; // Tentukan niat niat pribadi; // Dapatkan kontrol pribadi TextView Text_name; TextView pribadi Text_percent; tombol pribadi btn_start; tombol pribadi btn_stop; // File Display Private TextView Text_Sel_File; @Override Protected void onCreate (bundle savedInstanceState) {// TODO Metode yang dihasilkan secara otomatis 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 = (tombol) findViewById (r.id.btn_start); btn_stop = (tombol) findViewById (r.id.btn_stop); // Mengembalikan informasi tombol satu, menampilkan kemajuan myHandler = new handler () {@Override public void handlemessage (pesan msg) {super.handlemessage (msg); if (msg.what == 0x0001) {bundle data = msg.getData (); String str = data.getString ("value"); text_percent.setText (str); }}}}; // masukkan helloService intent = niat baru (ini, downservice.class); // Atur tombol start klik acara btn_start.setOnclickListener (OnClickListener baru () {@Override public void onclick (Lihat v) {// Mulai layanan startService (intent);}}); // Atur tombol stop klik acara btn_stop.setOnClickListener (OnClickListener baru () {@Override public void onClick (Lihat v) {// Tutup Layanan StopService (intent);}}); } / ****Metode panggilan balik akan secara otomatis dipanggil oleh sistem setelah nilai pengembalian dikembalikan* / @Override void onActivityResult (Int RequestCode, int resultCode, intent niat) {super.onactivityResult (permintaan kode, kode hasil, niat); // Jika kode permintaan adalah 0 // dan kode hasil yang dikembalikan adalah 1 // aktivitas yang diminta dapat mengembalikan beberapa kode hasil jika (requestCode == 0 && resultCode == 1) {// ambil data bundel data = intent.getExtras (); String str = data.getString ("file"); // Tampilkan data text_sel_file.settext (str); }}} 3. Activity_main.xml file
<? 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: orientasi = "vertikal"> <linearlayout android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_margintop = "20dp"@@@@@@+ 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 = "wrapeT_content" Android: Android = Layout_Height = "Wrape-content" Androad "Android = Layout = Layout_Height =" Wrape "content " android: layout_marginleft = "20dp" android: text = "0%"/> <linearlayout android: layout_width = "wrap_content" android: layout_height = "wrap_content" android: layout_marginleft = "20dp" android: orientor = "vertikal" "vertikal" dan vertikal "dan vertikal" dan vertikal "dan vertikal" dan vertikal "dan vertikal" 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="wrap_content" android:text="stop" /> </LinearLayout> </Linearlayout> </linearlayout> </linearlayout>
4.DownService digunakan untuk memungkinkan utas untuk menjalankan unduhan di latar belakang
Paket com.xhy.zz; impor java.io.bufferedInputStream; impor java.io.bufferedreader; impor java.io.bufferedreader; impor java.io.bufferedwriter; impor java.io.file; impor java.io.fileoutputstream. java.io.outputStreamWriter; import java.io.printwriter; import java.net.inetaddress; impor java.net.socket; impor dan impor dan impor; context. android.os.bundle; import android.os.environment; import android.os.ibinder; import android.os.message; import android.util.log; kelas public downservice memperluas layanan {private static final string tag = "socket_android"; // nama file dari operasi mekanisme preferensi public static final string preference_name = "downservice"; // mode operasi mekanisme preferensi statis public static mode = context.mode_private; // Thread Private Thread Workthread; // Tentukan nama file pribadi string fileName = "file"; // Port Number Private Int Port = 9888; private boolean isStop = false; / ****Metode yang harus diimplementasikan*/ @Override public iBinder onbind (niat niat) {return null; } @Override public void onCreate () {super.onCreate (); } @Override public int onStartCommand (intent intent, int flags, int startId) {log.v ("tcp", fileName); // Buat metode transmisi runnable latar belakang = runnable baru () {@Override public void run () {// setTitle ("Test Socket Connection"); Soket soket = null; Soket soket1 = null; Coba { / * * Tentukan alamat IP server, alamat ini adalah alamat LAN. Jika Anda menggunakan WiFi untuk menjelajahi Internet, itu adalah alamat IP WiFi dari PC * Alamat IP yang Anda lihat di IPConfig adalah sebagai berikut: Ethernet Adapter Wireless Network Connection: * Sufiks DNS khusus koneksi. : Alamat IP. . . *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Gunakan IP dan port server untuk membuat objek soket, dan mengirim permintaan ke server untuk mendapatkan socket nilai ukuran file1 = soket baru (serveraddr, port); String message = "--- test_socket_android ---"; Log.d ("tcp", "c: mengirim: '" + pesan + "'"); // Kirim informasi ke server melalui objek ini printwriter out = printwriter baru (BufferedWriter baru (outputStreamWriter baru (socket1.getoutputStream ()), true); // Kirim konten yang dimasukkan oleh pengguna ke server out.println ("file_size"); out.flush (); // menerima informasi server BufferedReader di = BufferedReader baru (inputStreamReader baru (socket1.getInputStream ())); // Dapatkan ukuran file string str1 = in.readline (); Log.d ("tcp", str1); // Konversi Ukuran File ke Int-Type Int Sum = integer.parseint (str1); Log.d ("tcp", str1); // tutup aliran input di.close (); SharedPreferences SharedPreferences = GetSharedPreferences (preference_name, mode); SharedPreferences.Editor Editor = SharedPreferences .Edit (); // Ambil byte yang ditransmisikan int pre = sharedpreferences.getint ("downservice", 0); int _pre = pra; // Konversikan menjadi string untuk dikirim ke server string s = string.valueof (_pre); // Gunakan IP dan port server untuk membuat objek soket dan mengirim permintaan ke server lagi untuk mendapatkan soket konten file = soket baru (serveraddr, port); // Kirim permintaan karakter ke server untuk mendapatkan file printwriter out1 = printwriter baru (BufferedWriter baru (outputStreamWriter baru (socket.getoutputStream ()), true); out1.println ("ok"+s); out1.flush (); out.close (); // Tentukan aliran input bufferedInputStream bis = baru bufferedInputStream (socket.getInputStream ()); String file1 = fileName; File string; // Tentukan apakah SDCard dimasukkan ke dalam telepon, masukkan file ke dalam kartu memori jika (lingkungan.getExternalStorAgeState (). Equals (lingkungan.media_mounted)) {file sdcard = lingkungan .getExternalStorageReCtory (); // file definisi kartu sd = sdcard.getCanonicalFile () + "/" + file1; // Tentukan file output file output fileOutputStream fos = new fileoutputStream (file, true); coba {int t = -1; int diunduh = pra; // Tentukan jumlah byte per byte transmisi [] buff = byte baru [8192]; Log.i ("sum", sum + ""); // Mulailah menulis file server ke kartu ponsel SD sementara ((t = bis.read (buff))! = -1) {if (isStop == true) {break; } fos.write (buff, 0, t); Diunduh += t; // penyimpanan editor kemajuan transmisi.putint ("downservice", diunduh); editor.commit (); // Ketika transmisi selesai, setel ulang informasi yang disimpan jika (diunduh == sum) {editor.putint ("downservice", 0); editor.commit (); } // Dapatkan kemajuan transfer file float wb = ((diunduh * 100) / (float) jumlah); int wi = (int) wb; System.out.println (diunduh); String str = string.ValueOf (wi) + "%"; // Kirim kemajuan transfer file ke baseaktivitas untuk ditampilkan ke pesan pengguna msg = pesan baru (); // Hasilkan pesan // Hasilkan pesan pesan. Apa = 0x0001; // Atur jenis pesan // menghasilkan bundel bundel data bundel data = bundel baru (); data.putString ("nilai", str); msg.setData (data); // Gunakan pawang untuk mengirim pesan MainActivity.myhandler.SendMessage (MSG); } // tutup aliran input dan output bis.close (); fos.flush (); fos.close (); } catch (Exception e) {bis.close (); fos.flush (); fos.close (); }} Log.d (tag, "dari server: 'diterima" + "'"); } catch (unknownHostException e) {log.e (tag, "192.168.155.1 adalah Paman Server!"); } catch (Exception e) {E.PrintStackTrace (); } akhirnya {coba {socket.close (); } catch (Exception e) {E.PrintStackTrace (); }}}}}}; workthread = utas baru (pekerjaan latar); // Metode IsAlive digunakan untuk menentukan apakah utas workthread dihidupkan IF (! workThread.isalive ()) {// menghasilkan utas baru workthread.start (); Log.v ("Servicelife", "Thread mulai bekerja"); } else {log.v ("workthread", "Thread telah dipanggil"); } return start_sticky; } @Override public void ondestroy () {super.ondestroy (); // mengganggu utas menggunakan interrupt isStop = true; Log.v ("Servicelife", "metode ondestroy disebut"); }} 5. Akhirnya, jangan lupa mendaftarkan androidmanifest.xml
<use-intimison android: name = "android.permission.internet"/> <use-izis android: name = "android.permission.mount_unmount_filesysystems"> </use-permission> <using-permission: name = "android android: name = ". downservice"> </servate>
Di atas adalah semua konten artikel ini. Saya berharap ini akan membantu untuk pembelajaran semua orang dan saya harap semua orang akan lebih mendukung wulin.com.