เมื่อเร็ว ๆ นี้ฉันได้เรียนรู้โครงการเล็ก ๆ จากเว็บไซต์บางแห่ง เพราะฉันมีชั้นเรียนในระหว่างวันฉันเขียนพวกเขาทั้งหมดในเวลากลางคืน ฉันทำเสร็จแล้ววันนี้
โครงการส่วนใหญ่ใช้ไฟล์อัพโหลดไฟล์อัพโหลดไฟล์โลคัลไปยังฐานข้อมูลของเซิร์ฟเวอร์ (ท้องถิ่น) ผ่านการเข้าสู่ระบบไคลเอนต์
ก่อนอื่นสร้างสองตารางดังนี้:
ตารางข้อมูลไฟล์
สร้างตาราง `fileinfo` (` fname` Char (50) ไม่ใช่ Null, `finfo` blob ไม่ใช่ Null,` fid` int (10) ไม่ใช่ null auto_increment, คีย์หลัก (`fid`)) เครื่องยนต์ = InnoDB Auto_Increment = 4 เริ่มต้น charset = utf8;;
ตารางข้อมูลผู้ใช้
สร้างตาราง `ผู้ใช้ '(` `username` char (25) ไม่เป็นโมฆะ` รหัสผ่าน `ถ่าน (25) ไม่ใช่ null,` ใช้ `int (10) ไม่ใช่ null auto_increment, คีย์หลัก (` useid`)) เครื่องยนต์ = InnoDB auto_increment = 19 เริ่มต้น charset = utf8;
ชั้นเรียนผู้ใช้
package fileupload; นำเข้า java.io.serializable; /** คลาสเอนทิตีของผู้ใช้*/ ผู้ใช้ระดับสาธารณะใช้ serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUid = -727909333384333393181L; Private int useId; // หมายเลขผู้ใช้สตริงส่วนตัว usename; // ชื่อผู้ใช้สตริงส่วนตัว usepsd; // รหัสผ่านผู้ใช้ผู้ใช้สาธารณะ () {} ผู้ใช้สาธารณะ (usename สตริง, สตริง usepsd) {super (); this.usename = usename; this.usepsd = usepsd; } ผู้ใช้สาธารณะ (int useId, usename string, string usepsd) {super (); this.useid = useId; this.usename = usename; this.usepsd = usepsd; } public int getUseId () {return useId; } โมฆะสาธารณะ setUsId (int useId) {this.use.useid = useId; } public String getUsename () {return usename; } โมฆะสาธารณะ setUsEname (String usename) {this.usename = usename; } สตริงสาธารณะ getUSEPSD () {return usepsd; } โมฆะสาธารณะ setUSEPSD (String USEPSD) {this.USEPSD = USEPSD; -คลาส Userservice
package fileupload; / *** คลาสการเข้าสู่ระบบและการลงทะเบียนผู้ใช้*/ นำเข้า Java.sql.Connection; นำเข้า java.sql.drivermanager; นำเข้า java.sql.preparedStatement; นำเข้า java.sql.resultset; นำเข้า java.sql.sqlexception; ผู้ใช้ชั้นเรียนสาธารณะ {การเชื่อมต่อส่วนตัว conn = null; PREASPENTSTATEMENT PTMT = NULL; Resultset Private RS = NULL; // ผู้ใช้เข้าสู่ระบบบูลีนสาธารณะเข้าสู่ระบบ (ผู้ใช้ผู้ใช้) {string url = "jdbc: mysql: // localhost: 3306/fileupload"; // สตริงการเชื่อมต่อฐานข้อมูลสตริงสตริง sql = "เลือก * จากผู้ใช้ที่ชื่อผู้ใช้ =? และรหัสผ่าน =?"; ลอง {class.forname ("org.gjt.mm.mysql.driver"). newinstance (); conn = drivermanager.getConnection (url, "root", "1995520"); ptmt = conn.prepareStatement (SQL); ptmt.setstring (1, user.getUsename ()); ptmt.setstring (2, user.getusepsd ()); rs = ptmt.executeQuery (); if (rs.next ()) {return true; }} catch (exception e) {e.printstacktrace (); } ในที่สุด {ลอง {rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} return false; } // การลงทะเบียนบูลีนสาธารณะ (ผู้ใช้ผู้ใช้) {system.out.println ("สวัสดี"); string url = "jdbc: mysql: // localhost: 3306/fileupload"; // การเชื่อมต่อฐานข้อมูลสตริงสตริง SQL = "แทรกลงในผู้ใช้ (ชื่อผู้ใช้รหัสผ่าน) ค่า (?,?)"; ลอง {class.forname ("org.gjt.mm.mysql.driver"). newinstance (); conn = drivermanager.getConnection (url, "root", "1995520"); ptmt = conn.prepareStatement (SQL); ptmt.setstring (1, user.getUsename ()); ptmt.setstring (2, user.getusepsd ()); ptmt.executeUpdate (); } catch (exception e) {e.printstacktrace (); กลับเท็จ; } ในที่สุด {ลอง {//rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} ส่งคืนจริง; -คลาส Fileiofo
package fileupload; นำเข้า java.io.serializable; /** คลาสเอนทิตีไฟล์*/ คลาสสาธารณะ FileInfo ใช้ serializable {ส่วนตัวคงที่สุดท้าย Long SerialVersionUID = 25546226262228481455L; private int fid; // หมายเลขไฟล์สตริงส่วนตัว fname; // ชื่อไฟล์ไบต์ส่วนตัว [] fcontent; // ไฟล์ไฟล์ public fileinfo () {} public fileInfo (สตริง fname, byte [] fcontent) {super (); this.fname = fname; this.fcontent = fcontent; } public fileInfo (int fid, string fname, byte [] fcontent) {super (); this.fid = fid; this.fname = fname; this.fcontent = fcontent; } public int getFid () {return fid; } โมฆะสาธารณะ setFid (int fid) {this.fid = fid; } สตริงสาธารณะ getFname () {return fname; } โมฆะสาธารณะ setFname (สตริง fname) {this.fname = fname; } ไบต์สาธารณะ [] getfcontent () {return fcontent; } โมฆะสาธารณะ setfcontent (byte [] fcontent) {this.fcontent = fcontent; -คลาส Fileservice
package fileupload; / *** ไฟล์การดำเนินการอัปโหลดไฟล์*/ นำเข้า java.sql.connection; นำเข้า java.sql.drivermanager; นำเข้า java.sql.preparedStatement; นำเข้า java.sql.sqlexception; ไฟล์สาธารณะคลาสสาธารณะ {การเชื่อมต่อส่วนตัว conn = null; PREASPENTSTATEMENT PTMT = NULL; // บันทึกไฟล์ลงในฐานข้อมูล Public Boolean บันทึก (ไฟล์ fileInfo) {string url = "jdbc: mysql: // localhost: 3306/fileupload"; // สตริงการเชื่อมต่อฐานข้อมูล SQL = "แทรกลงใน fileinfo (fname, finfo) ลอง {class.forname ("org.gjt.mm.mysql.driver"). newinstance (); conn = drivermanager.getConnection (url, "root", "1995520"); ptmt = conn.prepareStatement (SQL); ptmt.setstring (1, file.getFname ()); ptmt.setbytes (2, file.getfcontent ()); ptmt.executeUpdate (); } catch (exception e) {e.printstacktrace (); กลับเท็จ; } ในที่สุด {ลอง {ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} ส่งคืนจริง; - package fileupload;
นำเข้า java.io.ioException; นำเข้า java.net.serversocket; นำเข้า java.net.socket; /** เริ่มคลาสเซิร์ฟเวอร์*/ คลาสสาธารณะ starterver {@suppresswarnings ("ทรัพยากร") โมฆะคงที่สาธารณะ (สตริง [] args) {ลอง {// 1. สร้างซ็อกเก็ตฝั่งเซิร์ฟเวอร์นั่นคือเซิร์ฟเวอร์ระบุพอร์ตที่ถูกผูกไว้ ซ็อกเก็ตซ็อกเก็ต = null; System.out.println ("เซิร์ฟเวอร์เริ่มต้นรอให้ไคลเอนต์เชื่อมต่อ ... "); // ฟังการรอการเชื่อมต่อของลูกค้าอย่างยาวนานในขณะที่ (จริง) {// 2. เรียกเมธอด accept () เพื่อเริ่มฟังรอการเชื่อมต่อของลูกค้าของลูกค้า = serversocket.accept (); // สร้างเธรดใหม่ ServerThread ServerThread = ใหม่ ServerTHread (ซ็อกเก็ต); // เริ่มเธรด ServerThread.start (); }} catch (ioexception e) {// todo ที่สร้างขึ้นโดยอัตโนมัติบล็อก catch block e.printstacktrace (); }}}} [java] ดูการคัดลอกรหัสการคัดลอกแบบธรรมดาที่ได้จากรหัสของฉัน Slices Package Package FilePload; นำเข้า java.io.ioException; / ** * เริ่มคลาสไคลเอนต์ */ คลาสสาธารณะ startClient {โมฆะคงที่สาธารณะหลัก (สตริง [] args) พ่น IOException {socketClient client = socketClient ใหม่ (); client.showmainmenu (); // แสดงเมนูหลัก}}package fileupload;
นำเข้า java.io.ioException; นำเข้า Java.io.ObjectInputStream; นำเข้า Java.io.ObjectOutputStream; นำเข้า java.net.socket; นำเข้า Javax.swing.joptionpane; /** คลาสมัลติเธรดด้านเซิร์ฟเวอร์*/ คลาสสาธารณะคลาสเซิร์ฟเวอร์เธรดขยายเธรด {ซ็อกเก็ตซ็อกเก็ตคงที่ = null; private jectInputStream OIS = null; // การป้อนข้อมูลของ Object INPUT Private ObjectOutputStream oos = null; // output Object Output Stream ผู้ใช้ส่วนตัว US = ใหม่ Userservice (); // ผู้ใช้ธุรกิจวัตถุส่วนตัว FSERVICE FS = ใหม่ FILESERVICE (); // ไฟล์ธุรกิจ } public void run () {ลอง {ois = new ObjectInputStream (socket.getInputStream ()); // รับข้อความที่ส่งโดยไคลเอนต์ oos = ใหม่ ObjectOutputStream (socket.get.getOutputStream ()); // ใช้เพื่อส่งข้อความไปยังไคลเอนต์ CommandTransfer // อ่านการดำเนินการคำสั่งที่ส่งโดยไคลเอนต์ไปยังเซิร์ฟเวอร์ transfer = execute (transfer); // เรียกใช้การดำเนินการคำสั่งที่ส่งโดยไคลเอนต์ไปยังเซิร์ฟเวอร์ oos.writeObject (การถ่ายโอน); // ตอบสนองต่อไคลเอนต์} catch (iOexception | classnotFoundException e) {e.printstacktrace (); }}/** เรียกใช้การดำเนินการคำสั่งที่ส่งโดยไคลเอ็นต์ไปยังเซิร์ฟเวอร์*/ private CommandTransfer Execute (การถ่ายโอน CommandTransfer) {String cmd = transfer.getCmd (); // รับคำสั่งสำหรับการดำเนินการปัจจุบันถ้า (cmd.equals ("login")) {// ผู้ใช้ผู้ใช้ ธงบูลีน = us.login (ผู้ใช้); ถ้า (ธง) joptionpane.ShowMessagedialog (null, "เข้าสู่ระบบสำเร็จ!"); Transfer.setFlag (Flag); ถ้า (ธง) {// ตัดสินว่าการเข้าสู่ระบบนั้นประสบความสำเร็จในการถ่ายโอน SetResult ("เข้าสู่ระบบสำเร็จ!"); } else {transfer.setResult ("ชื่อผู้ใช้หรือรหัสผ่านไม่ถูกต้องโปรดเข้าสู่ระบบอีกครั้ง!"); }} อื่นถ้า (cmd.equals ("ลงทะเบียน")) {// ผู้ใช้การลงทะเบียนผู้ใช้ผู้ใช้ = (ผู้ใช้) transfer.getData (); us.register (ผู้ใช้); // ลงทะเบียน Flag บูลีนผู้ใช้ = us.register (ผู้ใช้); ถ้า (ธง) joptionpane.ShowMessageDialog (null, "ลงทะเบียนสำเร็จ!"); Transfer.setFlag (Flag); if (flag) {transfer.setResult ("ลงทะเบียนสำเร็จ!"); } else {transfer.setResult ("ลงทะเบียนล้มเหลว!"); }} อื่นถ้า (cmd.equals ("uploadfile")) {fileinfo file = (fileinfo) transfer.getData (); fs.save (ไฟล์); ธงบูลีน = fs.save (ไฟล์); ถ้า (ธง) joptionpane.ShowMessageDialog (null, "อัปโหลดสำเร็จ!"); Transfer.setFlag (Flag); if (flag) {transfer.setResult ("อัปโหลดสำเร็จ!"); } else {transfer.setResult ("อัปโหลดล้มเหลว!"); }} ส่งคืนการถ่ายโอน; }} package fileupload; นำเข้า Java.io.BufferedInputStream; นำเข้า Java.io.FileInputStream; นำเข้า java.io.filenotfoundException; นำเข้า java.io.ioException; นำเข้า Java.io.ObjectInputStream; นำเข้า Java.io.ObjectOutputStream; นำเข้า java.net.socket; นำเข้า java.net.unknownhostexception; นำเข้า java.util.scanner; / ** * คลาสเมนูหลัก */ SocketClient คลาสสาธารณะ {Scanner Input = ใหม่ Scanner (System.in); ซ็อกเก็ตซ็อกเก็ตแบบคงที่ส่วนตัว = null; // ซ็อกเก็ตไคลเอ็นต์ // เมนูหลักโมฆะสาธารณะ showmainmenu () พ่น ioexception {system.out.println ("****** ยินดีต้อนรับสู่การอัปโหลดไฟล์ xx *******"); System.out.println ("1.login/n2.register/n3.login"); System.out.println ("**********************************"); System.out.println ("โปรดเลือก:"); ตัวเลือก int = input.nextint (); // รับซ็อกเก็ตการเลือกของผู้ใช้ = ซ็อกเก็ตใหม่ ("localhost", 8888); สวิตช์ (ตัวเลือก) {กรณีที่ 1: showlogin (); // เข้าสู่ระบบเพื่อทำลาย; กรณีที่ 2: Showregister (); // register break; กรณีที่ 3: System.out.println ("ยินดีต้อนรับสู่การสนับสนุนระบบนี้"); System.Exit (0); ค่าเริ่มต้น: System.out.println ("อินพุตไม่ถูกต้อง!"); System.Exit (0); }} // การลงทะเบียนผู้ใช้เป็นโมฆะส่วนตัว showregister () พ่น IOException {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); CommandTransfer transfer = new CommandTransfer (); int count = 0; // จำนวนเวลาเข้าสู่ระบบในขณะที่ (จริง) {count ++; if (count> 3) {system.out.println ("คุณล้มเหลวในการเข้าสู่ระบบ 3 ครั้งติดต่อกันโปรแกรมออก!"); System.Exit (0); } system.out.print ("โปรดป้อนชื่อผู้ใช้:"); user.setUsename (input.next ()); System.out.print ("โปรดป้อนรหัสผ่าน:"); user.setUSEPSD (input.next ()); System.out.print ("โปรดป้อนรหัสผ่านอีกครั้ง:"); สตริง repassword = input.next (); if (! user.getUsepsd (). เท่ากับ (repassword)) {system.out.println ("รหัสผ่านที่ป้อนสองครั้งไม่สอดคล้องกัน!"); System.out.println ("*******************"); ดำเนินการต่อ; } transfer.setcmd ("ลงทะเบียน"); transfer.setData (ผู้ใช้); ลอง {senddata (transfer); // ส่งข้อมูลไปยังเซิร์ฟเวอร์ transfer = getData (); // รับข้อมูลที่ส่งคืนโดย Server System.out.println (transfer.getResult ()); // เอาต์พุตแสดงผล System.out.println ("***************************** if (transfer.isflag ()) {break; // ถ้าการลงทะเบียนสำเร็จการลงทะเบียนจะไม่ถูกทำซ้ำ}} catch (unknownhostexception e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {}} showlogin (); // ล็อกอินหลังจากการลงทะเบียนสำเร็จ} // รับข้อมูลเซิร์ฟเวอร์สาธารณะคงที่ static static fetdata () โยน ioexception {// วิธีการที่สร้างอัตโนมัติ CommandTransfer res = null; ลอง {ถ้า (socket.isclosed ()) ซ็อกเก็ต = ซ็อกเก็ตใหม่ ("localhost", 8888); ois = ใหม่ ObjectInputStream (socket.getInputStream ()); res = (CommandTransfer) ois.readObject (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); } catch (classnotfoundexception e) {// todo บล็อก catch block ที่สร้างขึ้นอัตโนมัติ e.printstacktrace (); } ในที่สุด {ถ้า (ois! = null) {ลอง {ois.close (); //socket.close (); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); }}} return res; } /** อัปโหลดไฟล์* / โมฆะส่วนตัว showupLoadFile () พ่น IOException {system.out.println ("โปรดป้อนเส้นทางสัมบูรณ์เพื่ออัปโหลดไฟล์:"); String path = input.next (); ไฟล์ fileinfo = null; FileInputStream FIS = NULL; bufferedInputStream bis = null; String fname = path.substring (path.lastindexof ("/") + 1); ลอง {fis = new FileInputStream (พา ธ ); ไบต์ [] fcontent = ไบต์ใหม่ [fis.available ()]; bis = ใหม่ bufferedInputStream (FIs); bis.read (fcontent); file = new fileInfo (fname, fcontent); } catch (filenotfoundException e) {e.printStackTrace (); } ในที่สุด {bis.close (); fis.close (); } CommandTransfer transfer = new CommandTransfer (); transfer.setcmd ("uploadfile"); transfer.setData (ไฟล์); ลอง {senddata (transfer); // ส่งข้อมูลไปยังเซิร์ฟเวอร์ transfer = getData (); // รับข้อมูลที่ส่งคืนโดย Server System.out.println (transfer.getResult ()); // ผลลัพธ์การแสดงผล} catch } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {}} // ส่งข้อมูลไปยังเซิร์ฟเวอร์โมฆะสาธารณะคงที่ senddata (CommandTransfer cmd) พ่น IOException {// todo วิธีการที่สร้างขึ้นอัตโนมัติ stub objectOutStream oos = null; ลอง {ถ้า (socket.isclosed ()) // ตัดสินว่าซ็อกเก็ตถูกปิดหรือไม่ ถ้าปิดซ็อกเก็ตเปิด = ซ็อกเก็ตใหม่ ("localhost", 8888); OOS = ใหม่ ObjectOutputStream (socket.getOutputStream ()); oos.writeObject (CMD); } catch (ioexception e) {// todo บล็อก catch block ที่สร้างอัตโนมัติ e.printstacktrace (); }} // ผู้ใช้เข้าสู่ระบบเป็นโมฆะส่วนตัว showlogin () พ่น IOException {ผู้ใช้ผู้ใช้ = ผู้ใช้ใหม่ (); CommandTransfer transfer = new CommandTransfer (); ในขณะที่ (จริง) {system.out.print ("โปรดป้อนชื่อผู้ใช้:"); user.setUsename (input.next ()); System.out.print ("โปรดป้อนรหัสผ่าน:"); user.setUSEPSD (input.next ()); transfer.setcmd ("เข้าสู่ระบบ"); transfer.setData (ผู้ใช้); ลอง {senddata (transfer); // ส่งข้อมูลไปยังเซิร์ฟเวอร์ transfer = getData (); // รับข้อมูลที่ส่งคืนโดย Server System.out.println (transfer.getResult ()); // เอาต์พุตแสดงผล system.out.println ("*************************************************** if (transfer.isflag ()) {break; // ถ้าการลงทะเบียนสำเร็จการลงทะเบียนจะไม่ถูกทำซ้ำ}} catch (unknownhostexception e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); } ในที่สุด {}} showupLoadFile (); // อัปโหลดไฟล์หลังจากเข้าสู่ระบบสำเร็จ}}}การเรนเดอร์การดำเนินการมีดังนี้:
ไฟล์ถูกบันทึกลงในฐานข้อมูล โครงการนี้ค่อนข้างดีสำหรับเพื่อนที่ต้องการฝึกซ็อกเก็ตการสื่อสารและ MySQL
ข้างต้นคือ Java Socket+MySQL การใช้งานการอัปโหลดไฟล์ง่าย ๆ ที่แนะนำโดยตัวแก้ไข ฉันหวังว่ามันจะเป็นประโยชน์กับทุกคน หากคุณมีคำถามใด ๆ โปรดฝากข้อความถึงฉันและบรรณาธิการจะตอบกลับทุกคนในเวลา ขอบคุณมากสำหรับการสนับสนุนเว็บไซต์ Wulin.com!