Kürzlich habe ich ein kleines Projekt von einer bestimmten Website gelernt. Weil ich tagsüber Unterricht habe, habe ich sie nachts alle geschrieben. Ich habe es heute abgeschlossen.
Das Projekt implementiert hauptsächlich einen Datei -Uploader, in dem lokale Dateien über die Client -Anmeldung in die Datenbank des Servers (lokal) hochgeladen werden.
Erstellen Sie zunächst zwei Tabellen wie folgt:
Eine Dateiinformationstabelle
TABLE `FileInfo` (` fname` char (50) nicht null, `finfo` bloB null,` fid` int (10) nicht null auto_increment, Primärschlüssel (`fid`)) Engine = innoDB auto_increment = 4 Default charset = utf8;
Eine Benutzerinformationstabelle
Erstellen Sie Tabelle `user`` (` username` char (25) nicht null, `password` char (25) nicht null,` useId` int (10) nicht null auto_increment, Primärschlüssel (`useId`) Engine = innoDB auto_increment = 19 Default charSet = utf8;
Benutzerklasse
PaketdateiEUpload; importieren java.io.serializable; /** Benutzerentitätsklasse*/ öffentliche Klasse Benutzer implementiert serialisierbar {private statische endgültige long serialversionuid = -7279093338433393181l; private int useId; // Benutzernummer private Zeichenfolge usename; // Benutzername private String usepsd; // Benutzerkennwort public user () {} public user (String ussename, string usepsd) {super (); this.usename = usename; this.usepsd = Usepsd; } public user (int gebrauch, string usename, string usepsd) {super (); this.useId = useId; this.usename = usename; this.usepsd = Usepsd; } public int getuseId () {return useId; } public void setuseId (int gebrauch) {this.useId = useId; } public String getUSename () {return usename; } public void setUSeName (String usename) {this.usName = usename; } public String getuSepSd () {return usepsd; } public void setUsepSPSD (string usepsd) {this.usepSd = usepsd; }}UserService -Klasse
PaketdateiEUpload; / *** Benutzeranmeldungs- und Registrierungsbetriebsklasse*/ Import Java.sql.Connection; importieren java.sql.drivermanager; importieren java.sql.preeParedStatement; importieren java.sql.resultset; importieren java.sql.sqlexception; öffentliche Klasse UserService {private Verbindung conn = null; private prepectStatement ptmt = null; privates Ergebnis rs = null; // Benutzeranmeldung public boolean Login (Benutzer Benutzer) {String url = "jdbc: mysql: // localhost: 3306/fileUpload"; // Datenbankverbindungsstring String SQL = "SELECT * vom Benutzer, wo userername =? Und password =?"; try {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.getUsepSp ()); rs = ptmt.executeQuery (); if (rs.Next ()) {return true; }} catch (Ausnahme e) {e.printstacktrace (); } endlich {try {rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} return false; } // Benutzerregistrierung öffentliches Boolean Register (Benutzerbenutzer) {System.out.println ("Hallo"); String url = "jdbc: mysql: // localhost: 3306/fileUpload"; // Datenbankverbindung String String String SQL = "In Benutzer (Benutzername, Kennwort) Werte (?,?)"; try {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.getUsepSp ()); ptmt.executeUpdate (); } catch (Ausnahme e) {e.printstacktrace (); false zurückgeben; } endlich {try {//rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} return true; }}Dateieiofo -Klasse
PaketdateiEUpload; importieren java.io.serializable; /** Dateientitätsklasse*/ public class FileInfo implementiert serialisierbar {private statische endgültige lange Serialversionuid = 2554622626228481455L; private int fid; // Datei Nummer private Zeichenfolge fname; // Dateiname private Byte [] fContent; // Dateiinhalt public FileInfo () {} public FileInfo (String 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 () {rets fid; } public void setfid (int fid) {this.fid = fid; } public String getfname () {return fname; } public void setfname (String fname) {this.fname = fname; } public byte [] getfcontent () {return fContent; } public void setfContent (byte [] fContent) {this.fcontent = fContent; }}Dateiservice -Klasse
PaketdateiEUpload; / *** Datei -Upload -Betriebsklasse*/ importieren java.sql.connection; importieren java.sql.drivermanager; importieren java.sql.preeParedStatement; importieren java.sql.sqlexception; public class fileService {private Verbindung conn = null; private prepectStatement ptmt = null; // die Datei in der Datenbank speichern public boolean speichern (FileInfo -Datei) {String url = "jdbc: mysql: // localhost: 3306/fileUpload"; // Datenbankverbindungsstring String SQL = "In FileInfo (fname, finfo) Wert einfügen") "; try {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 (Ausnahme e) {e.printstacktrace (); false zurückgeben; } endlich {try {ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} return true; }} PaketdateiEUpload;
importieren java.io.ioException; importieren java.net.serversocket; importieren java.net.socket; /** Start Server-Klasse*/ öffentliche Klasse startserver {@SuppressWarnings ("Ressource") public static void main (String [] args) {try {// 1. Erstellen Sie einen serverseitigen Socket, dh ServerSocket, Geben Sie den gebundenen Port an und hören Sie diesen Port ServerSocket = New ServerSocket (8888). Socket Socket = Null; System.out.println ("Der Server wurde gestartet, und wartet darauf, dass der Client eine Verbindung herstellt ..."); // Warten Sie sorgfältig auf die Verbindung des Clients, während (true) {// 2. Rufen Sie die Methode Accept () auf, um mit dem Zuhören zu beginnen, und warten Sie auf den Verbindungs -Socket des Kunden = serverSocket.accept (); // Erstellen Sie einen neuen Thread thread thread = new Serverthread (Socket); // Starten Sie den Thread -Serverthread.start (); }} catch (ioException e) {// Todos automatisch generiertes Catch -Block e.printstacktrace (); }}}} [java] Kly -Copy -Ansichtscode -Slices anzeigen, die aus meinem Code -Slices -Paket -Datei -Dateiload abgeleitet sind; importieren java.io.ioException; / ** * Starten Sie die Client -Klasse */ public class startClient {public static void main (string [] args) löst IOException aus {SocketClient Client = newscetClient (); Client.ShowmainMenu (); // Hauptmenü}} anzeigen}}PaketdateiEUpload;
importieren java.io.ioException; importieren java.io.objectinputStream; importieren java.io.objectoutputStream; importieren java.net.socket; import Javax.swing.joptionpane; /** Server-Seite Multithreading-Klasse*/ Public Class Serverthread erweitert Thread {static Socket Socket = null; private static ObjectInputStream ois = null; // Objekteingabe Stream private ObjektOutputStream oos = null; // Objektausgabe Stream private Userservice US = new UserService (); // Benutzergeschäftsobjekt private FileService fs = new FileService (); // Dateigeschäftsobjekt // Initialisieren von Socket Public Servere (Sockket Socket) {ServertheEld.Socket.Socket.Socket.Socket.Socket.Socket.Socket.Socket.Socket.Socket.Socket.Socket.Socket.Socket = Socket. } public void run () {try {ois = new ObjectInputStream (socket.getInputStream ()); // Meldungen empfangen, die vom Client OOS = new ObjectOutputStream (socket.getOutputStream ()) gesendet wurden, // verwendet, um Nachrichten an den Client -Befehlshaber zu senden. // Lesen Sie den vom Client an die Servertransfer = Execute (Transfer) gesendeten Befehlsvorgang; // Führen Sie den vom Client an den Server gesendeten Befehlsvorgang aus oOS.WriteObject (Transfer); // auf den Client} catch (ioException | classNotFoundException e) {e.printstacktrace (); }}/** Führen Sie den vom Client an den Server gesendeten Befehlsvorgang aus*/ private commandTransfer execute (commandentsfertransfer) {String cmd = Transfer.getCmd (); // den Befehl für die aktuelle Operation abrufen if (cmd.equals ("Login") {// Benutzeranmeldung user = (user). booleschen Flaggen = US.login (Benutzer); if (flag) joptionpane Transfer.SetFlag (Flag); if (flag) {// beurteilen, ob das Anmeldung erfolgreich ist. } else {Transfer.SetResult ("Benutzername oder Kennwort ist falsch, bitte melden Sie sich erneut an!"); }} else if (cmd.equals ("register") {// Benutzerregistrierung user user = (user) Transfer.getData (); US.register (Benutzer); // Benutzer boolean flag = us.register (Benutzer) registrieren; if (flag) joptionpane Transfer.SetFlag (Flag); if (Flag) {Transfer.setResult ("Erfolgreiche Register!"); } else {Transfer.setResult ("Register fehlgeschlagen!"); }} else if (cmd.equals ("uploadFile") {FileInfo File = (FileInfo) Transfer.getData (); fs.Save (Datei); boolesche Flagge = fs.Save (Datei); if (Flag) joptionpane.showMessagedialog (null, erfolgreich hochgeladen! "); Transfer.SetFlag (Flag); if (Flag) {Transfer.setResult ("erfolgreich hochgeladen!"); } else {Transfer.setResult ("Upload fehlgeschlagen!"); }} Rückgabeübertragung; }} Paket FileUpload; import Java.io.BufferedInputStream; import Java.io.FileInputStream; importieren java.io.filenotfoundException; importieren java.io.ioException; importieren java.io.objectinputStream; importieren java.io.objectoutputStream; importieren java.net.socket; Importieren Sie java.net.unnownhostException; import Java.util.scanner; / ** * Hauptmenüklasse */ öffentlicher Klasse SocketClient {Scanner input = neuer Scanner (System.in); privater statischer Socket Socket = NULL; // Client -Socket // Hauptmenü public void showmainmenu () löst IOException aus {System.out.println ("****** Willkommen zum XX -Datei -Uploader *******"); System.out.println ("1.login/n2.register/n3.login"); System.out.println("************************************"); System.out.println ("Bitte auswählen:"); int choice = input.Nextint (); // Erhalten Sie die Auswahl des Benutzers. Switch (Auswahl) {Fall 1: showlogin (); // melden Sie sich an, um zu brechen; Fall 2: Showregister (); // Register Break; Fall 3: System.out.println ("Willkommen, um dieses System zu unterstützen"); System.exit (0); Standard: System.out.println ("Die Eingabe ist falsch!"); System.exit (0); }} // Benutzerregistrierung private void showEregister () löscht ioException {user user = new user (); CommandTransfer Transfer = new CommandTransfer (); int count = 0; // Anzahl der Anmeldezeiten, während (true) {count ++; if (count> 3) {system.out.println ("Sie haben sich in 3 aufeinanderfolgenden Zeiten nicht angemeldet, das Programm beendet!"); System.exit (0); } System.out.print ("Bitte geben Sie den Benutzernamen ein:"); user.setUSeName (input.Next ()); System.out.print ("Bitte ein Kennwort eingeben:"); user.setUsepSp (input.Next ()); System.out.print ("Bitte ein Kennwort eingeben:"); String repassword = input.next (); if (! user.getusepSpsd (). Equals (Repassword)) {System.out.println ("Die zweimal eingegebenen Passwörter sind inkonsistent!"); System.out.println("*********************"); weitermachen; } Transfer.setCMD ("Register"); Transfer.SetData (Benutzer); Versuchen Sie {sendData (Transfer); // Daten an servertransfer = getData (); // Die vom Server System zurückgegebenen Daten erhalten.out.println (Transfer.getResult ()); // Ausgabe -Display -Ergebnis system.out.println ("*********************** if (Transfer.isflag ()) {break; // Wenn die Registrierung erfolgreich ist, wird die Registrierung nicht wiederholt}} catch (unbekannteHostException e) {e.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } endlich {}} showLogin (); // Anmeldung nach der Registrierung ist erfolgreich} // Serverdaten öffentliche statische Befehlstransfer getData () löscht ioException {// Todo automatisch generierte Methode Stub-ObjectInputStream Ois = null; CommandTransfer res = null; try {if (socket.isclosed ()) socket = new Socket ("localhost", 8888); OIS = new ObjectInputStream (Socket.getInputStream ()); res = (commandTransfer) ois.readObject (); } catch (ioException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } catch (classNotFoundException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); } endlich {if (ois! = null) {try {ois.close (); //socket.close (); } catch (ioException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); }}} return res; } /** Datei hochladen* / private void showUploadFile () löst IOException {System.out.println aus ("Bitte geben Sie den absoluten Pfad ein, um die Datei hochzuladen:"); String path = input.next (); FileInfo File = null; FileInputStream fis = null; BufferedInputStream Bis = null; String fname = path.substring (path.lastIndexof ("/") + 1); try {fis = new FileInputStream (Pfad); byte [] fContent = new Byte [fis.Available ()]; Bis = neuer BufferedInputStream (FIS); Bis.read (fContent); Datei = new FileInfo (fname, fContent); } catch (FilenotFoundException e) {e.printstacktrace (); } endlich {Bis.close (); fis.close (); } CommandTransfer Transfer = new CommandTransfer (); Transfer.SetCMD ("UploadFile"); Transfer.SetData (Datei); Versuchen Sie {sendData (Transfer); // Daten an server transfer = getData (); // Die vom Server System zurückgegebenen Daten erhalten. } catch (ioException e) {e.printstacktrace (); } endlich {}} // Daten an den Server öffentliche statische void sendData (commandTransfer cmd) löscht ioException {// Todo automatisch generierte Methode Stub-ObjektOutputStream OOS = null; Versuchen Sie {if (socket.isclosed ()) // Beurteilen Sie, ob der Sockel geschlossen ist. Wenn geschlossen, Open Socket = New Socket ("Localhost", 8888); OOS = new ObjectOutputStream (Socket.getOutputStream ()); OOS.WriteObject (CMD); } catch (ioException e) {// Todo automatisch generierter Catch-Block e.printstacktrace (); }} // Benutzer melden sich bei privat void showlogin () an ioException {user user = new user (); CommandTransfer Transfer = new CommandTransfer (); while (true) {System.out.print ("Bitte geben Sie den Benutzernamen ein:"); user.setUSeName (input.Next ()); System.out.print ("Bitte geben Sie das Passwort ein:"); user.setUsepSp (input.Next ()); Transfer.SetCMD ("Login"); Transfer.SetData (Benutzer); Versuchen Sie {sendData (Transfer); // Daten an servertransfer = getData (); // Die vom Server System zurückgegebenen Daten erhalten.out.println (Transfer.getResult ()); // Ausgabe -Anzeige -Ergebnis system.out.println ("******************************** if (Transfer.isflag ()) {break; // Wenn die Registrierung erfolgreich ist, wird die Registrierung nicht wiederholt}} catch (unbekannteHostException e) {E.printstacktrace (); } catch (ioException e) {e.printstacktrace (); } endlich {}} showUploadFile (); // Die Datei nach erfolgreichem Anmeldung hochladen}}}Die Operationsrenderungen sind wie folgt:
Die Datei wurde in der Datenbank gespeichert. Dieses Projekt ist ziemlich gut für Freunde, die Socket -Kommunikation und MySQL üben möchten.
Das obige ist der vom Editor eingeführte Java -Socket+MySQL -Implementierung einfacher Datei -Uploader. Ich hoffe, es wird für alle hilfreich sein. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Editor wird allen rechtzeitig antworten. Vielen Dank für Ihre Unterstützung auf der Wulin.com -Website!