บทความนี้แนะนำกรณีการถ่ายโอนไฟล์ที่ใช้ซ็อกเก็ต Java และมีการแชร์กับคุณสำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
1. รหัส Java
แพ็คเกจ com.wf.demo.socket.socketfile; นำเข้า Java.net.*; นำเข้า Java.io.*; / ** * 2. คลาส Util Helper ของ Socket * * @author Willson * */ Class Public Class ClientOcket {สตริงส่วนตัว IP; พอร์ต int ส่วนตัว; ซ็อกเก็ตซ็อกเก็ตส่วนตัว = null; dataOrtputStream out = null; datainputStream getMessagestream = null; Public ClientSocket (สตริง IP, พอร์ต int) {this.ip = ip; this.port = พอร์ต; } / ** * สร้างการเชื่อมต่อซ็อกเก็ต * * @throws Exception * ข้อยกเว้น * / โมฆะสาธารณะ createConnection () พ่นข้อยกเว้น {ลอง {ซ็อกเก็ต = ซ็อกเก็ตใหม่ (IP, พอร์ต); } catch (exception e) {e.printstacktrace (); ถ้า (ซ็อกเก็ต! = null) socket.close (); โยน e; } ในที่สุด {}} // ส่งข้อความโมฆะสาธารณะ sendMessage (สตริง sendMessage) พ่นข้อยกเว้น {ลอง {out = ใหม่ dataOutputStream (socket.get.getOutputStream ()); if (sendMessage.equals ("windows")) {out.writeByte (0x1); out.flush (); กลับ; } if (sendMessage.equals ("unix")) {out.writeByte (0x2); out.flush (); กลับ; } if (sendMessage.equals ("linux")) {out.writeByte (0x3); out.flush (); } else {out.writeUtf (sendMessage); out.flush (); }} catch (exception e) {e.printstacktrace (); ถ้า (ออก! = null) out.close (); โยน e; } ในที่สุด {}} // ยอมรับข้อความสาธารณะ datainputStream getMessageStream () โยนข้อยกเว้น {ลอง {getMessagestream = ใหม่ datainputStream (ใหม่ bufferedInputStream (socket.getInputStream ()); กลับ getMessagestream; } catch (exception e) {e.printstacktrace (); ถ้า (getMessagestream! = null) getMessagestream.close (); โยน e; } ในที่สุด {}} // ปิดการเชื่อมต่อโมฆะการเชื่อมต่อสาธารณะ shutdownConnection () {ลอง {ถ้า (ออก! = null) out.close (); ถ้า (getMessagestream! = null) getMessagestream.close (); ถ้า (ซ็อกเก็ต! = null) socket.close (); } catch (Exception E) {}}}} 2. รหัส Java
แพ็คเกจ com.wf.demo.socket.socketfile; นำเข้า Java.io.BufferedInputStream; นำเข้า java.io.datainputstream; นำเข้า Java.io.DataOutputStream; นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า java.net.serversocket; นำเข้า java.net.socket; / ** * 1. ฝั่งเซิร์ฟเวอร์ * * @author Willson * */ คลาสสาธารณะ servertest {int port = 8821; เป็นโมฆะ start () {ซ็อกเก็ตซ็อกเก็ต = null; ลอง {Serversocket Serversocket = ใหม่ Serversocket (พอร์ต); ในขณะที่ (จริง) {// เลือกไฟล์สำหรับการถ่ายโอนสตริง filePath = "e: //lib.zip"; ไฟล์ fi = ไฟล์ใหม่ (filepath); System.out.println ("ชื่อไฟล์:" + fi.getName () + ";/tfile size ():" + (int) fi.length () + "ไบต์"); // ซ็อกเก็ตสาธารณะยอมรับ () โยน // ioexception รับฟังและยอมรับการเชื่อมต่อกับซ็อกเก็ตนี้ วิธีนี้บล็อกจนกว่าจะมีการเชื่อมต่อ System.out.println ("รอให้ไคลเอนต์เชื่อมต่อ, พอร์ตการเชื่อมต่อ:" + พอร์ต); ซ็อกเก็ต = serversocket.accept (); System.out.println ("สร้างลิงก์ซ็อกเก็ต"); datainputStream dis = ใหม่ datainputStream (ใหม่ bufferedInputStream (socket.getInputStream ())); dis.readbyte (); DatainputStream FIS = ใหม่ datainputStream (ใหม่ bufferedInputStream (ใหม่ FileInputStream (FilePath))); DataOrtputStream PS = ใหม่ dataOutputStream (socket.getOutputStream ()); // ส่งชื่อไฟล์และความยาวไปยังไคลเอนต์ เพื่อนำไปใช้กับแพลตฟอร์มทั้งหมดอย่างแท้จริงเช่นการประมวลผลชื่อภาษาจีนก็จำเป็นต้องได้รับการประมวลผล สำหรับรายละเอียดโปรดดูที่คิดใน Java // มีรหัสสำเร็จรูปใน 4 ps.writeutf (fi.getName ()); ps.flush (); ps.writeLong ((ยาว) fi.length ()); ps.flush (); int buffersize = 8192; ไบต์ [] buf = ไบต์ใหม่ [บัฟเฟอร์]; ในขณะที่ (จริง) {int read = 0; if (fis! = null) {read = fis.read (buf); } if (read == -1) {break; } ps.write (buf, 0, อ่าน); } ps.flush (); // ให้ความสนใจกับการปิดลิงก์ซ็อกเก็ตมิฉะนั้นไคลเอนต์จะรอข้อมูลของเซิร์ฟเวอร์มาถึง // จนกว่าจะหมดเวลาซ็อกเก็ตส่งผลให้ข้อมูลไม่สมบูรณ์ fis.close (); Socket.close (); System.out.println ("การถ่ายโอนไฟล์เสร็จสมบูรณ์/n"); }} catch (exception e) {e.printstacktrace (); }} โมฆะคงที่สาธารณะหลัก (สตริง arg []) {new servertest (). start (); -
3. ลูกค้า
แพ็คเกจ com.wf.demo.socket.socketfile; นำเข้า Java.io.BufferedOutputStream; นำเข้า java.io.datainputstream; นำเข้า Java.io.DataOutputStream; นำเข้า Java.io.FileOutputStream; / ** * 3. ไคลเอนต์ * * @author Willson * */ Class Public Class ClientTest {Private ClientSocket CS = NULL; สตริงส่วนตัว ip = "localhost"; // ตั้งค่าเป็นเซิร์ฟเวอร์ ip private primental พอร์ต = 8821; สตริงส่วนตัว sendMessage = "windwos"; Public ClientTest () {ลอง {ถ้า (createConnection ()) {sendMessage (); getMessage ("f: //"); }} catch (Exception ex) {ex.printstacktrace (); }} boolean ส่วนตัว createConnection () {cs = new CrientsOcket (IP, พอร์ต); ลอง {cs.CreateConnection (); System.out.print ("เชื่อมต่อกับเซิร์ฟเวอร์สำเร็จ!" + "/n"); กลับมาจริง; } catch (exception e) {system.out.print ("การเชื่อมต่อกับเซิร์ฟเวอร์ล้มเหลว!" + "/n"); กลับเท็จ; }} โมฆะส่วนตัว sendMessage () {ถ้า (cs == null) return; ลอง {CS.SendMessage (SendMessage); } catch (exception e) {system.out.print ("ส่งข้อความล้มเหลว!" + "/n"); }} โมฆะส่วนตัว getMessage (String savePath) {ถ้า (cs == null) return; datainputStream inputStream = null; ลอง {inputStream = cs.getMessagestream (); } catch (exception e) {system.out.print ("รับข้อผิดพลาดแคชข้อความ/n"); กลับ; } ลอง {// path local save ชื่อไฟล์จะสืบทอดจากฝั่งเซิร์ฟเวอร์โดยอัตโนมัติ int buffersize = 8192; ไบต์ [] buf = ไบต์ใหม่ [บัฟเฟอร์]; int passedlen = 0; Long Len = 0; savepath += inputStream.readutf (); dataOrtputStream fileout = ใหม่ dataOutputStream (ใหม่ bufferedOutputStream (ใหม่ bufferedOutputStream (ใหม่ fileOutputStream (savepath))))); len = inputstream.readlong (); System.out.println ("ขนาดไฟล์ ():" + len + "ไบต์"); System.out.println ("เริ่มรับไฟล์!" + "/n"); ในขณะที่ (จริง) {int read = 0; if (inputStream! = null) {read = inputStream.read (buf); } passedlen += อ่าน; if (read == -1) {break; } // แถบความคืบหน้าต่อไปนี้ทำจาก ProgressBar ของอินเทอร์เฟซกราฟิก หากคุณกำลังพิมพ์ไฟล์ที่นี่บางเปอร์เซ็นต์เดียวกันอาจถูกพิมพ์ซ้ำ ๆ System.out.println ("ไฟล์ที่ได้รับ" + (passedlen * 100 / len) + "% / n"); fileout.write (buf, 0, อ่าน); } system.out.println ("ได้รับไฟล์บันทึกเป็น" + savepath + "/n"); fileout.close (); } catch (exception e) {system.out.println ("รับข้อความผิดพลาด" + "/n"); กลับ; }} โมฆะคงที่สาธารณะหลัก (String arg []) {ใหม่ clientTest (); -ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับทุกคนในการเรียนรู้การเขียนโปรแกรม Java