ตัวอย่างนี้แชร์รหัสเฉพาะสำหรับไคลเอนต์การใช้งาน Java เพื่อส่งไฟล์ไปยังเซิร์ฟเวอร์สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
ซอร์สโค้ดเซิร์ฟเวอร์:
นำเข้า java.io.bufferedreader; นำเข้า Java.io.File; นำเข้า java.io.filenotfoundException; นำเข้า Java.io.FileOutputStream; นำเข้า java.io.ioException; นำเข้า Java.io.InputStreamReader; นำเข้า java.net.serversocket; นำเข้า java.net.socket; /*** ชื่อไฟล์: ServerReceive.java* ฟังก์ชั่นการใช้งาน: ในฐานะเซิร์ฟเวอร์รับไฟล์ที่ส่งโดยไคลเอนต์** กระบวนการใช้งานเฉพาะ:* 1 สร้างซ็อกเก็ตเซิร์ฟเวอร์และรอให้ไคลเอนต์เชื่อมต่อ* 2 เมื่อมีการเชื่อมต่อไคลเอ็นต์ การสื่อสาร* 4. รับแพ็คเก็ตข้อมูลในลูปและเขียนแพ็คเก็ตข้อมูลไปยังไฟล์* 5 เมื่อความยาวของข้อมูลที่ได้รับเท่ากับความยาวของไฟล์ที่ส่งโดยไฟล์ล่วงหน้าหมายความว่าไฟล์ได้รับและไฟล์ปิด* 6 การรับไฟล์****************************************************************************** การส่งสัญญาณและการไหลออกของไฟล์สามารถวางได้ด้วยตัวเองตามโปรแกรมของคุณเอง] * * * ผู้แต่ง: Xiaoqiu * เวลาการสร้าง: 2014-08-19 * * */ เซิร์ฟเวอร์ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {/ ** การสื่อสารการสื่อสารเพื่อสร้างการเชื่อมต่อกับเซิร์ฟเวอร์ ซ็อกเก็ต s = null; / ** กำหนดวัตถุไฟล์และวัตถุสตรีมเอาต์พุตไฟล์ที่สร้างขึ้นในเครื่องหลังจากการรับ*/ ไฟล์ไฟล์ = null; fileOutputStream fos = null; / ** กำหนดสตรีมอินพุตและใช้อินพุตของซ็อกเก็ตเพื่อป้อนแพ็คเก็ต*/ inputstream คือ = null; / ** กำหนดอาร์เรย์ไบต์เพื่อทำหน้าที่เป็นแพ็คเก็ตจัดเก็บสำหรับแพ็กเก็ต*/ byte [] บัฟเฟอร์ = ไบต์ใหม่ [4096*5]; / ** สตริง Stand Stand ที่ใช้เพื่อรับคำขอส่งไฟล์*/ string comm = null; / ** ตั้งค่าการสื่อสาร SOCEKT และรอให้เซิร์ฟเวอร์เชื่อมต่อ*/ ลอง {SS = ใหม่ Serversocket (4004); s = ss.accept (); } catch (ioexception e) {e.printstacktrace (); } / ** อ่านข้อมูลการประชุมที่ส่งโดยบรรทัดของไคลเอนต์* / ลอง {inputStreamReader isr = new InputStreamReader (s.getInputStream ()); bufferedReader br = new bufferedReader (ISR); comm = br.readline (); } catch (ioexception e) {system.out.println ("เซิร์ฟเวอร์ตัดการเชื่อมต่อจากไคลเอนต์"); }/** เริ่มแยกวิเคราะห์คำสั่งคำขอที่ส่งโดย client*/int index = comm.indexof ("/#"); / ** อภิปรายว่าโปรโตคอลเป็นโปรโตคอลสำหรับการส่งไฟล์*/ string xieyi = comm.substring (0, ดัชนี); if (! xieyi.equals ("111")) {system.out.println ("รหัสโปรโตคอลที่ได้รับจากเซิร์ฟเวอร์ไม่ถูกต้อง"); กลับ; } / ** แยกชื่อชื่อและขนาดของไฟล์* / comm = comm.substring (ดัชนี + 2); index = comm.indexof ("/#"); String filename = comm.substring (0, index) .trim (); String filesize = comm.substring (ดัชนี + 2) .trim (); / ** สร้างไฟล์เปล่าเพื่อรับไฟล์*/ file = ไฟล์ใหม่ (ชื่อไฟล์); if (! file.exists ()) {ลอง {file.createnewFile (); } catch (ioexception e) {system.out.println ("การสร้างไฟล์ด้านเซิร์ฟเวอร์ล้มเหลว"); }} else { / ** คุณสามารถถามได้ว่าจะเขียนทับ* / system.out.println ("ไฟล์เดียวกันอยู่แล้วในเส้นทางนี้เขียนทับ"); } / ** [ด้านบนเป็นส่วนที่เตรียมไว้ของเซิร์ฟเวอร์ที่เขียนไว้ในรหัสไคลเอนต์]* / / ***รหัสคีย์สำหรับเซิร์ฟเวอร์เพื่อรับไฟล์* / ลอง { / ** ห่อไฟล์ลงในวัตถุส่งออกไฟล์* / fos = ใหม่ fileOutputStream (ไฟล์); file_size long = long.parselong (filesize); IS = S.GetInputStream (); / ** ขนาดคือความยาวของแต่ละแพ็คเก็ตที่ได้รับ*/ int size = 0; / ** นับใช้เพื่อบันทึกความยาวของไฟล์ที่ได้รับ*/ long count = 0; / ** รับแพ็คเก็ตที่ใช้ในขณะลูป*/ ในขณะที่ (นับ <file_size) {/ ** อ่านแพ็คเก็ตจากสตรีมอินพุต*/ size = is.read (บัฟเฟอร์); / ** เขียนแพ็คเก็ตที่คุณเพิ่งอ่านไปยังไฟล์ท้องถิ่น*/ fos.write (บัฟเฟอร์, 0, ขนาด); fos.flush (); / ** ความยาวของไฟล์ที่ได้รับ +ขนาด*/ count += size; System.out.println ("เซิร์ฟเวอร์ได้รับแพ็กเก็ตขนาดคือ" + ขนาด); }} catch (filenotfoundexception e) {system.out.println ("เซิร์ฟเวอร์ไม่สามารถเขียนไฟล์"); } catch (ioexception e) {system.out.println ("เซิร์ฟเวอร์: ไคลเอ็นต์ตัดการเชื่อมต่อ"); } ในที่สุด { / *** ปิดไฟล์ที่เปิด* หากจำเป็นคุณยังสามารถปิดการเชื่อมต่อซ็อกเก็ตได้ที่นี่** / ลอง {ถ้า (fos! = null) fos.close (); } catch (ioexception e) {e.printstacktrace (); } // catch (ioexception e)} // ในที่สุด} // โมฆะคงที่สาธารณะหลัก (สตริง [] args)} // เซิร์ฟเวอร์ระดับสาธารณะซอร์สโค้ดไคลเอนต์:
นำเข้า Java.io.File; นำเข้า Java.io.FileInputStream; นำเข้า java.io.filenotfoundException; นำเข้า java.io.ioException; นำเข้า Java.io.OutputStream; นำเข้า java.io.printstream; นำเข้า java.net.socket; /** * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * รหัสใช้เพื่อแสดงการถ่ายโอนไฟล์ระหว่างไคลเอนต์และเซิร์ฟเวอร์เท่านั้น * ไม่มีคำสั่ง File Protocol ก่อนแต่ละแพ็กเก็ตข้อมูล * การส่งโปรโตคอลเฉพาะและขั้นตอนการใช้งานไฟล์ขาออกสามารถวางได้ตามโปรแกรมของคุณเอง] * * * ผู้แต่ง: สามเณร * เวลาการสร้าง: 2014-08-19 * * */ ลูกค้าชั้นเรียนสาธารณะ /** กำหนดวัตถุไฟล์นั่นคือไฟล์ที่จะส่ง*หากคุณใช้เส้นทางสัมบูรณ์อย่าลืมใช้ความแตกต่างระหว่าง '/' และ '/' ** สำหรับความแตกต่างที่เฉพาะเจาะจงโปรดสอบถามตัวอ่านด้วยตัวเอง**/ไฟล์ sendFile = ไฟล์ใหม่ ("API.CHM"); / ** กำหนดสตรีมอินพุตไฟล์เพื่อเปิดและอ่านไฟล์ที่จะส่ง*/ fileInputStream fis = null; / ** กำหนดอาร์เรย์ไบต์ที่จะใช้เป็นแพ็คเก็ตจัดเก็บข้อมูลของแพ็กเก็ตข้อมูล*/ byte [] buffer = byte ใหม่ [4096*5]; / ** กำหนดสตรีมเอาต์พุตและใช้ outputstream ของซ็อกเก็ตเพื่อส่งออกแพ็คเก็ต*/ outputstream OS = null; / ** ตรวจสอบว่าไฟล์ที่จะส่งมีอยู่*/ if (! sendfile.exists ()) {system.out.println ("ไคลเอนต์: ไฟล์ที่จะส่งไม่มีอยู่"); กลับ; } / ** สร้างการเชื่อมต่อกับเซิร์ฟเวอร์* / ลอง {s = ซ็อกเก็ตใหม่ ("127.0.0.1", 4004); } catch (ioexception e) {system.out.println ("ไม่เชื่อมต่อกับเซิร์ฟเวอร์"); } / ** เริ่มต้นวัตถุ FIS ด้วยวัตถุไฟล์*เพื่อให้ขนาดไฟล์สามารถสกัดได้** / ลอง {FIS = ใหม่ FileInputStream (SendFile); } catch (filenotfoundexception e1) {e1.printstacktrace (); } /** ก่อนอื่นส่งข้อมูลเกี่ยวกับไฟล์ไปยังเซิร์ฟเวอร์เพื่ออำนวยความสะดวกให้เซิร์ฟเวอร์รับการเตรียมการที่เกี่ยวข้อง*สำหรับการเตรียมการเฉพาะโปรดตรวจสอบรหัสเซิร์ฟเวอร์ * * เนื้อหาที่ส่งรวมถึง: การส่งรหัสโปรโตคอลไฟล์ (นี่คือ 111)/#ชื่อไฟล์ (พร้อมชื่อต่อท้าย)/#ขนาดไฟล์ * */ลอง {printstream ps = printstream ใหม่ (s.getOutputStream ()); ps.println ("111/#" + sendfile.getName () + "/#" + fis.available ()); ps.flush (); } catch (ioexception e) {system.out.println ("การเชื่อมต่อการเชื่อมต่อเซิร์ฟเวอร์"); } / *** นอนที่นี่เป็นเวลา 2 วินาทีรอให้เซิร์ฟเวอร์เตรียมงานที่เกี่ยวข้อง* เพื่อให้แน่ใจว่าการหน่วงเวลาของเครือข่าย* ผู้อ่านสามารถเลือกเพิ่มรหัสนี้** / ลอง {thread.sleep (2000); } catch (interruptedException e1) {e1.printStackTrace (); } / ** หลังจากงานเตรียมการก่อนหน้านี้เสร็จสิ้น*ต่อไปนี้เป็นรหัสคีย์สำหรับการถ่ายโอนไฟล์** / ลอง { / ** รับ outputstream ของซ็อกเก็ตเพื่อเขียนแพ็กเก็ตลงไป* / os = s.getOutputStream (); / ** ขนาดใช้เพื่อบันทึกขนาดของแต่ละไฟล์ที่อ่าน*/ int size = 0; / ** อ่านไฟล์โดยใช้ขณะลูปจนกว่าการอ่านไฟล์จะเสร็จสิ้น*/ ในขณะที่ ((ขนาด = fis.read (บัฟเฟอร์))! = -1) {system.out.println ("ไคลเอนต์ส่งแพ็กเก็ตขนาดคือ" + ขนาด); / ** เขียนแพ็คเก็ตที่คุณเพิ่งอ่านลงในสตรีมเอาต์พุต*/ os.write (บัฟเฟอร์, 0, ขนาด); / ** รีเฟรช*/ os.flush (); }} catch (filenotfoundexception e) {system.out.println ("ข้อผิดพลาดไฟล์การอ่านไคลเอนต์"); } catch (ioexception e) {system.out.println ("ข้อผิดพลาดไฟล์เอาต์พุตไคลเอ็นต์"); } ในที่สุด { / *** ปิดไฟล์ที่เปิด* หากจำเป็นคุณยังสามารถปิดการเชื่อมต่อซ็อกเก็ตได้ที่นี่** / ลอง {ถ้า (fis! = null) fis.close (); } catch (ioexception e) {system.out.println ("ข้อผิดพลาดในการปิดไฟล์ไคลเอนต์"); } // catch (ioexception e)} // ในที่สุด} // โมฆะคงที่สาธารณะหลัก (สตริง [] args)} // ลูกค้าชั้นเรียนสาธารณะข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น