Artikel ini memperkenalkan kasus transfer file berbasis soket Java, dan dibagikan kepada Anda untuk referensi Anda. Konten spesifiknya adalah sebagai berikut
1. Kode Java
paket com.wf.demo.socket.socketfile; impor java.net.*; impor java.io.*; / ** * 2. port int pribadi; soket soket pribadi = null; DataOutputStream out = null; DataInputStream getMessageStream = null; klien publik (string ip, port int) {this.ip = ip; this.port = port; } / ** * Buat koneksi soket * * @throws Exception * Exception * / public void createConnection () melempar Exception {coba {socket = soket baru (ip, port); } catch (Exception e) {E.PrintStackTrace (); if (socket! = null) socket.close (); lempar e; } akhirnya {}} // Kirim pesan public void sendMessage (String sendMessage) melempar Exception {try {out = new DataOutputStream (socket.getOutputStream ()); if (sendMessage.equals ("windows")) {out.writebyte (0x1); out.flush (); kembali; } if (sendMessage.equals ("unix")) {out.writebyte (0x2); out.flush (); kembali; } if (sendMessage.equals ("linux")) {out.writebyte (0x3); out.flush (); } else {out.writeutf (sendMessage); out.flush (); }} catch (Exception e) {e.printstacktrace (); if (out! = null) out.close (); lempar e; } akhirnya {}} // Terima pesan public datalputStream getMessAgeStream () melempar pengecualian {coba {getMessAgeStream = new DataInputStream (baru bufferedInputStream (socket.getInputStream ())); return getMessageStream; } catch (Exception e) {E.PrintStackTrace (); if (getMessageStream! = null) getMessageStream.close (); lempar e; } akhirnya {}} // tutup koneksi public void shutdownConnection () {coba {if (out! = null) out.close (); if (getMessageStream! = null) getMessageStream.close (); if (socket! = null) socket.close (); } catch (Exception e) {}}} 2. Kode Java
paket com.wf.demo.socket.socketfile; impor java.io.bufferedInputStream; impor java.io.datainputstream; impor java.io.dataoutputStream; impor java.io.file; impor java.io.fileInputStream; impor java.net.serversocket; impor java.net.socket; / ** * 1. Sisi server * * @author willson * */ kelas publik servertest {int port = 8821; void start () {socket socket = null; Coba {ServerSocket ServerSocket = New ServerSocket (port); while (true) {// pilih file untuk transfer string filepath = "e: //lib.zip"; File fi = file baru (filepath); System.out.println ("Nama file:" + fi.getName () + ";/tfile size ():" + (int) fi.length () + "bytes"); // Public Socket Accept () Throws // IoException mendengarkan dan menerima koneksi ke soket ini. Metode ini memblokir sampai koneksi dibuat. System.out.println ("Menunggu klien untuk terhubung, port koneksi:" + port); socket = serversocket.accept (); System.out.println ("Buat tautan soket"); DataInputStream dis = new DatalputStream (baru bufferedInputStream (socket.getInputStream ())); dis.readbyte (); DataInputStream fis = new DatalputStream (baru bufferedInputStream (FileInputStream baru (FilePath))); DataOutputStream PS = DataOutputStream baru (socket.getoutputStream ()); // Lewati nama file dan panjang ke klien. Untuk benar -benar berlaku untuk semua platform, seperti pemrosesan nama Cina, itu juga perlu diproses. Untuk detailnya, silakan merujuk ke Think in Java // ada kode siap pakai di urutan ke-4. ps.writeutf (fi.getname ()); ps.flush (); ps.writelong ((panjang) fi.length ()); ps.flush (); int bufferSize = 8192; byte [] buf = byte baru [bufferSize]; while (true) {int read = 0; if (fis! = null) {baca = fis.read (buf); } if (baca == -1) {break; } ps.write (buf, 0, baca); } ps.flush (); // Perhatikan untuk menutup tautan soket, jika tidak klien akan menunggu data server datang, // sampai batas waktu soket, menghasilkan data yang tidak lengkap. fis.close (); socket.close (); System.out.println ("Transfer File Selesai/N"); }} catch (Exception e) {e.printstacktrace (); }} public static void main (string arg []) {new servertest (). start (); }}
3. Klien
paket com.wf.demo.socket.socketfile; impor java.io.bufferedoutputStream; impor java.io.datainputstream; impor java.io.dataoutputStream; impor java.io.fileoutputStream; / ** * 3. Klien * * @author Willson * */ kelas publik ClientTest {private clientocket cs = null; Private String IP = "LocalHost"; // Set ke Server IP Private Int Port = 8821; Private String SendMessage = "Windwos"; clienttest publik () {coba {if (createConnection ()) {sendMessage (); getMessage ("f: //"); }} catch (exception ex) {ex.printstacktrace (); }} private boolean createConnection () {cs = klien baru (ip, port); coba {cs.createConnection (); System.out.print ("terhubung ke server berhasil!" + "/N"); Kembali Benar; } catch (Exception e) {System.out.print ("Menghubungkan ke server gagal!" + "/n"); mengembalikan false; }} private void sendMessage () {if (cs == null) kembali; coba {cs.sendMessage (sendMessage); } catch (Exception e) {System.out.print ("Kirim pesan gagal!" + "/n"); }} private void getMessage (string savePath) {if (cs == null) return; InputStream datalputStream = null; coba {inputStream = cs.getMessageStream (); } catch (Exception e) {System.out.print ("Terima pesan kesalahan cache/n"); kembali; } coba {// jalur penyimpanan lokal, nama file akan secara otomatis mewarisi dari sisi server. int bufferSize = 8192; byte [] buf = byte baru [bufferSize]; int passlen = 0; len len = 0; savePath += inputStream.readutf (); DataOutputStream Fileout = New DataOutputStream (baru bufferedOutputStream (baru bufferedOutputStream (FileOutputStream baru (savePath)))); len = inputStream.readlong (); System.out.println ("File size ():" + len + "bytes"); System.out.println ("Mulai menerima file!" + "/N"); while (true) {int read = 0; if (inputStream! = null) {baca = inputStream.read (buf); } lulus += baca; if (baca == -1) {break; } // Bilah kemajuan berikut dibuat dari progresbar dari antarmuka grafis. Jika Anda mengetik file di sini, beberapa persentase yang sama dapat berulang kali dicetak System.out.println ("File diterima" + (lulus * 100 / len) + "% / n"); fileout.write (buf, 0, baca); } System.out.println ("Diterima, file disimpan sebagai" + savePath + "/n"); fileout.close (); } catch (Exception e) {System.out.println ("Terima pesan kesalahan" + "/n"); kembali; }} public static void main (String arg []) {new clientTest (); }}Saya harap artikel ini akan membantu semua orang untuk mempelajari pemrograman Java.