บทความนี้แชร์รหัสเฉพาะของเซิร์ฟเวอร์อัพโหลดไฟล์ Java และไคลเอนต์สำหรับการอ้างอิงของคุณ เนื้อหาเฉพาะมีดังนี้
เซิร์ฟเวอร์อัพโหลดไฟล์:
/ *** ฝั่งเซิร์ฟเวอร์โดยใช้โปรโตคอล TCP เพื่อใช้ฟังก์ชั่นการอัปโหลด* ความคิด:* สร้างเซิร์ฟเวอร์ใหม่* รอให้ไคลเอ็นต์เชื่อมต่อ* หลังจากเชื่อมต่อแล้วเริ่มเธรดลูกผ่านซ็อกเก็ตที่ได้จากการเชื่อมต่อกับเธรดลูก* @author yajun** คำสั่ง uploadThread = ใหม่ uploadThread (); Server.Start (คำสั่ง); } /*** ฟังก์ชั่น: ยอมรับการเชื่อมต่อเริ่มเธรดลูก, ลูป* @param คำสั่งวัตถุเธรดลูกที่ใช้ในการดาวน์โหลดซึ่งใช้อินเตอร์เฟสที่เรียกใช้งานได้* /โมฆะส่วนตัวเริ่มต้น (คำสั่ง UploadThread) {// ตัวแปรท้องถิ่น Serversocket Serversocket = null; ซ็อกเก็ต Transsocket; // ตรรกะทางธุรกิจลอง {serversocket = ใหม่ Serversocket (55555); ในขณะที่ (จริง) {system.out.println ("รอการเชื่อมต่อ ... "); transsocket = serversocket.accept (); int i = 0; i ++; System.out.println ("th"+i+"การเชื่อมต่อ"); // คุณต้องปิดเธรดหลังจากดาวน์โหลดหรือไม่? - - command.setsocket (transsocket); Executors.NewFixedThreadPool (5) .Execute (คำสั่ง); } // ข้อยกเว้น catch} catch (ioexception e) {e.printstacktrace (); // ปิดทรัพยากร} ในที่สุด {ลอง {serversocket.close (); } catch (ioexception e) {e.printstacktrace (); }} // end of try} // สิ้นสุดการเชื่อมต่อ @Test Public Void TestConnect () {// งานทดสอบ: ก่อนอื่นให้เรียกใช้ฝั่งเซิร์ฟเวอร์จากนั้นเรียกใช้ไคลเอนต์หลายครั้ง เซ็กเมนต์เซิร์ฟเวอร์สามารถสร้างเธรดลูกได้อย่างต่อเนื่องและการทดสอบนั้นสำเร็จ // การเตรียมการทดสอบ: สร้างเธรดเพื่อจำลองคำสั่งดาวน์โหลดเธรดอัปโหลดเธรด = ใหม่ uploadThread (); เริ่มต้น (คำสั่ง); } @Test Public Void Testdown () พ่น IOException {byte [] buf; ByteArrayInputStream bis; string str = "canglaoshi.avi/ncontent, เนื้อหา, เนื้อหา"; buf = str.getBytes (); bis = bytearrayinputstream (buf) ใหม่; UploadThread UT = ใหม่ uploadThread (); ut.down (bis); }} // subthread ที่เสร็จสิ้นแต่ละงานการส่งงานคลาส UploadThread onploadThread ใช้งาน Runnable {ซ็อกเก็ตซ็อกเก็ต; public uploadThread () {} public uploadThread (ซ็อกเก็ตซ็อกเก็ต) {this.socket = ซ็อกเก็ต; } @Override โมฆะสาธารณะเรียกใช้ () {inputStream ใน; ลอง {in = socket.getInputStream (); ลง (ใน); // การจัดการข้อยกเว้น} catch (ioexception e) {e.printstacktrace (); } ในที่สุด {ลอง {socket.close (); } catch (ioexception e) {e.printstacktrace (); }} // รหัสทดสอบ/*ลอง {thread.sleep (5000); System.out.println (thread.currentthread (). getName ()+", copyname ()+"); } catch (interruptedException e) {e.printStackTrace (); }*/} // สิ้นสุดการเรียกใช้โมฆะสาธารณะ setsocket (ซ็อกเก็ตซ็อกเก็ต) {this.socket = ซ็อกเก็ต; } // วิธีการดาวน์โหลด/*** เป้าหมาย: เขียนข้อมูลในอินพุตสตรีมไปยังไอเดีย* ท้องถิ่น:* 1 รับกระแสอินพุตมันเป็นการดีที่สุดที่จะส่งผ่านในสตรีมอินพุตแทนที่จะได้รับโดยตรงจากซ็อกเก็ตและส่งผ่านเพื่อใช้การทดสอบยูนิต* 2 ลง (inputstream in) พ่น IOException {// ตัวแปรท้องถิ่น Char Ch; ถ่าน [] namearr = ถ่านใหม่ [256]; ไบต์ [] buf = ไบต์ใหม่ [1024]; ชื่อสตริง = ""; outputstream out = null; // ตรรกะทางธุรกิจลอง {// ขั้นตอนที่ 1: รับชื่อไฟล์และสร้างสตรีมเอาต์พุตไฟล์ int i = 0; ในขณะที่ ((ch = (char) in.read ())! = '/n') {namearr [i ++] = ch; } //name=namearr.toString();///ishis ประโยคไม่สามารถแปลงอาร์เรย์อักขระเป็นสตริงได้ คุณต้องใช้ชื่อคำสั่งต่อไปนี้ = สตริงใหม่ (namearr); System.out.println ("ไฟล์ที่จะดาวน์โหลดคือ:"+ชื่อ); out = new fileOutputStream ("src // down //"+ชื่อ); // ขั้นตอนที่ 2: เขียนเนื้อหาอื่น ๆ ในสตรีมอินพุตไปยังไฟล์ int len; ในขณะที่ ((len = in.read (buf))! =-1) {out.write (buf, 0, len); } out.flush (); // การจับข้อยกเว้น} catch (ioexception e) {e.printstacktrace (); // ทรัพยากรปิด} ในที่สุด {// คำถาม: การจับภาพสองครั้งสามารถรวมเข้าด้วยกันได้หรือไม่? จะจัดการกับข้อยกเว้นได้อย่างไรเมื่อปิดสตรีม? in.close (); out.close (); } // debug system.out.println (ชื่อ); }} // end of uploadThread ไฟล์อัปโหลดไฟล์:
/ *** ไคลเอนต์ที่ใช้โปรโตคอล TCP เพื่อใช้ฟังก์ชั่นการอัปโหลด* @author yajun*/ คลาสสาธารณะ UploadClient {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {uploadClient client = new uploadClient (); client.upload ("src // วันพฤหัสบดี // aslisttest.java"); } / *** ฟังก์ชั่น: อัปโหลดไฟล์ไปยังเซิร์ฟเวอร์* 1 สร้างการเชื่อมต่อกับเซิร์ฟเวอร์* 2 รับกระแสเอาต์พุต* 3 เขียนเนื้อหาไฟล์ไปยังสตรีมเอาต์พุต* 4 รับการตอบกลับของเซิร์ฟเวอร์* / การอัปโหลดโมฆะส่วนตัว (ชื่อสตริง) {ซ็อกเก็ตซ็อกเก็ต = null; เอาท์พุทสตรีมออก; ลอง {ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("127.0.0.1", 5555); out = socket.getOutputStream (); Write2OutputStream (ชื่อ, ออก); // การจับข้อยกเว้น} catch (unknownhostexception e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); }} @Test โมฆะสาธารณะ testupload () {อัปโหลด ("src // status.xml"); } / ** * ฟังก์ชั่น: ส่งผ่านชื่อไฟล์และสตรีมเอาต์พุตเขียนไฟล์ไปยังสตรีมเอาต์พุต * @param พา ธ * @throws ioexception * / โมฆะส่วนตัว write2outputstream (เส้นทางสตริง, เอาท์พุทสตรีมออก) โยน ioexception {fileInputStream fis = null; ไบต์ [] buf = ไบต์ใหม่ [1024]; String filename = ""; // ตรรกะทางธุรกิจลอง {// 1 เขียนชื่อไฟล์ชื่อไฟล์ = path.substring (path.AlastIndexof ('//')+1); System.out.println ("ชื่อไฟล์ที่คุณต้องการอัปโหลดคือ:"+ชื่อไฟล์); out.write (filename.getBytes ()); out.write ('/n'); // 2. เขียนเนื้อหาไฟล์ FIS = ใหม่ FileInputStream (พา ธ ); int len; ในขณะที่ ((len = fis.read (buf))! =-1) {out.write (buf, 0, len); } out.flush (); // การจัดการข้อยกเว้น} catch (ioexception e) {e.printstacktrace (); // ปิดทรัพยากร} ในที่สุด {fis.close (); out.close (); }} // สิ้นสุดการอัปโหลด @Test โมฆะสาธารณะ testWrite2OutputStream () พ่น IOException {byteArrayOutputStream out = null; ลอง {out = new ByteArrayOutputStream (); Write2OutputStream ("src // status.xml", out); System.out.println (out.toString ("UTF-8")); } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {out.close (); -บทความนี้ได้รวบรวมไว้ใน "สรุปเทคนิคการดำเนินการอัพโหลด Java" และทุกคนยินดีที่จะเรียนรู้และอ่าน
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น