Récemment, j'ai appris un petit projet à partir d'un certain site Web. Parce que j'ai des cours pendant la journée, je les ai tous écrits la nuit. Je l'ai terminé aujourd'hui.
Le projet implémente principalement un téléchargeur de fichiers, téléchargeant des fichiers locaux dans la base de données du serveur (local) via la connexion client.
Tout d'abord, créez deux tables comme suit:
Un tableau d'informations sur le fichier
Créer la table `fileInfo` (` fname` char (50) pas null, `finfo` blob not null,` fid` int (10) pas null auto_increment, clé primaire (`fid`)) moteur = innodb auto_increment = 4 charset par défaut = utf8;
Un tableau d'informations utilisateur
Créer la table `User` (« Username »char (25) pas null,` mot de passe »char (25) pas null,` useid` int (10) pas null auto_increment, clé primaire (`useId`)) moteur = innodb auto_incment = 19 charme de défaut = utf8;
Classe d'utilisateurs
package fileupload; import java.io.serializable; / * * Classe d'entité utilisateur * / Classe publique L'utilisateur implémente Serializable {private static final long SerialVersionUID = -727909333843393181l; private int useid; // numéro utilisateur String private usename; // nom d'utilisateur chaîne privée usepsd; // user mot de passe public utilisateur () {} public utilisateur (String usename, string usepsd) {super (); this.useName = usename; this.USEPSD = usepsd; } utilisateur public (int useId, string usename, string usepsd) {super (); this.useid = useId; this.useName = usename; this.USEPSD = usepsd; } public int getUseID () {return useId; } public void SetUseId (int useid) {this.useid = useId; } public String getUsename () {return usename; } public void SetUsename (String usename) {this.useName = usename; } public String getUSEPSD () {return usepsd; } public void SetUsePSD (String usepsd) {this.usepsd = usepsd; }}Classe de service d'utilisateur
package fileupload; / ** * Classe d'opération de connexion et d'enregistrement de l'utilisateur * / Importer java.sql.connection; Importer Java.Sql.DiverManager; Importer java.sql.PreparedStatement; import java.sql.resultSet; import java.sql.sqlexception; classe publique UserService {Connection privée conn = null; Private préparé Ptmt = null; ResultSet privé rs = null; // Login utilisateur public Boolean Login (utilisateur utilisateur) {String url = "jdbc: mysql: // localhost: 3306 / fileupload"; // string de connexion de la base de données sql = "select * from user where username =? Et mot de passe =?"; essayez {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 (); } enfin {try {Rs.close (); ptmt.close (); } catch (sqlexception e) {e.printStackTrace (); }} return false; } // Enregistrement utilisateur public booléen registre (utilisateur utilisateur) {System.out.println ("Bonjour"); String url = "jdbc: mysql: // localhost: 3306 / fileupload"; // la chaîne de connexion de la base de données string sql = "insérer dans l'utilisateur (nom d'utilisateur, mot de passe) (?,?)"; essayez {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 (); retourne false; } enfin {try {//rs.close (); ptmt.close (); } catch (sqlexception e) {e.printStackTrace (); }} return true; }}Classe FileIofo
package fileupload; import java.io.serializable; / * * Classe d'entité de fichier * / classe publique FileInfo implémente Serializable {private static final long SerialVersionUID = 2554622626228481455l; private int fid; // Numéro de fichier String privé fname; // nom de fichier octet privé [] fcontent; // contenu de fichier 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 () {return fid; } public void setFid (int fid) {this.fid = fid; } public String getFName () {return fName; } public void setFname (string fname) {this.fname = fname; } octet public [] getfContent () {return fcontent; } public void setfContent (byte [] fcontent) {this.fcontent = fcontent; }}Classe FileService
package fileupload; / ** * Classe d'opération de téléchargement de fichiers * / Importer java.sql.connection; Importer Java.Sql.DiverManager; Importer java.sql.PreparedStatement; import java.sql.sqlexception; classe publique FileService {connexion privée conn = null; Private préparé Ptmt = null; // Enregistrer le fichier dans la base de données publique booléen sauf (fichier fileInfo) {string url = "jdbc: mysql: // localhost: 3306 / fileupload"; // database Connection String string sql = "insérer dans fileInfo (fname, finfo) value (?,?)"; essayez {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 (); retourne false; } enfin {try {ptmt.close (); } catch (sqlexception e) {e.printStackTrace (); }} return true; }} package fileupload;
Importer java.io.ioException; import java.net.serversocket; import java.net.socket; / * * Démarrer la classe du serveur * / classe publique Starterserver {@SuppressWarnings ("Resource") public static void main (String [] args) {try {// 1. Créer un socket côté serveur, c'est-à-dire ServerSocket, spécifiez le port lié et écoutez ce port Serversocket Serversocket = new Serversocket (8888); Douille à douille = null; System.out.println ("Le serveur a été démarré, en attendant que le client se connecte ..."); // Écoutez longtemps pour attendre la connexion du client tandis que (true) {// 2. Appelez la méthode Accept () pour commencer à écouter, en attendant le socket de connexion du client = serveSocket.Accept (); // Créer un nouveau thread ServerThread ServerThread = new ServerThread (socket); // Démarrez le thread serverthread.start (); }} catch (ioException e) {// TODO a automatiquement généré le bloc de capture e.printStackTrace (); }}}} [Java] Afficher la copie simple des tranches de code dérivées de mon code de package de code de code; Importer java.io.ioException; / ** * Démarrez la classe client * / classe publique StartClient {public static void main (String [] args) lève ioException {socketClient client = new socketClient (); client.showmainMenu (); // Afficher le menu principal}}package fileupload;
Importer java.io.ioException; import java.io.objectInputStream; Importer java.io.ObjectOutputStream; import java.net.socket; import javax.swing.joptionpane; / * * Classe multithreading côté serveur * / classe publique ServerThread étend Thread {static socket socket = null; Private Static ObjectInputStream OIS = NULL; // Entrée d'objet Stream Private ObjectOutputStream OOS = NULL; // OBJET STRIEUX STREAT PRIVATE USERSERVICE US = NEW USERSERVICE (); // User Business Object Private FileService FS = new FileService (); // File Business Object // Initialize Socking Public ServerThread (Socket Socket) {ServerThread.Socket = Socket; } public void run () {try {ois = new ObjectInputStream (socket.getInputStream ()); // reçoit des messages envoyés par le client oos = new ObjectOutputStream (socket.getOutputStream ()); // utilisé pour envoyer des messages au client CommandTransfer Transfer = (CommandTransfer) OIS.readObject (); // Lisez l'opération de commande envoyée par le client sur le serveur transfert = EXECUTE (transfert); // Exécuter l'opération de commande envoyée par le client au serveur oos.writeObject (transfert); // répond au client} catch (ioException | classNotFoundException e) {e.printStackTrace (); }} / * * Exécutez l'opération de commande envoyée par le client au serveur * / CommandTransfer privé EXECUTE (CommandTransfer Transfer) {String cmd = transfer.getcmd (); // Obtenez la commande de l'opération actuelle if (cmd.equals ("Login")); booléen flag = us.login (utilisateur); if (drapeau) joptionpane.showMessageAdog (null, "connecter avec succès!"); transfert.setflag (drapeau); if (flag) {// juger si la connexion est réussie transfert.setResult ("Connexion avec succès!"); } else {transfer.setResult ("Le nom d'utilisateur ou le mot de passe est incorrect, veuillez vous connecter à nouveau!"); }} else if (cmd.equals ("registre")) {// User Registration User user = (user) transfer.getData (); us.register (utilisateur); // enregistrer l'utilisateur booléen flag = us.register (utilisateur); if (drapeau) joptionpane.showMessageAdog (null, "inscrivez-vous avec succès!"); transfert.setflag (drapeau); if (flag) {transfert.setResult ("enregistrer réussi!"); } else {transfer.setResult ("registre a échoué!"); }} else if (cmd.equals ("uploadfile")) {fileInfo file = (fileInfo) transfer.getData (); fs.save (fichier); booléen drapeau = fsave (fichier); if (drapeau) joptionpane.showMessageAriALOG (null, "Téléchargé avec succès!"); transfert.setflag (drapeau); if (flag) {transfer.setResult ("Uploaded réussi!"); } else {transfer.setResult ("Upload a échoué!"); }} return transfert; }} package fileupload; Importer java.io.BufferedInputStream; import java.io.fileInputStream; import java.io.filenotfoundException; Importer java.io.ioException; import java.io.objectInputStream; Importer java.io.ObjectOutputStream; import java.net.socket; import java.net.unknownhostException; import java.util.scanner; / ** * Classe de menu principal * / classe publique SocketClient {Scanner Input = new Scanner (System.in); socket statique privé = null; // socket client // menu principal public void showMainMenu () lève ioException {System.out.println ("****** Bienvenue à xx Fichier Uploader *******"); System.out.println ("1.login / n2.gister / n3.login"); System.out.println ("**************************************"); System.out.println ("Veuillez sélectionner:"); int Choice = input.nextint (); // Obtenir le socket de sélection de l'utilisateur = new socket ("localhost", 8888); switch (choix) {cas 1: showlogin (); // Connectez-vous à Break; Cas 2: showRegister (); // enregistrer la pause; Cas 3: System.out.println ("Bienvenue à la prise en charge de ce système"); System.exit (0); par défaut: System.out.println ("L'entrée est incorrecte!"); System.exit (0); }} // Enregistrement de l'utilisateur privé void showRegister () lève ioException {user user = new user (); CommandTransfer Transfer = new CommandTransfer (); int count = 0; // nombre de temps de connexion while (true) {count ++; if (count> 3) {System.out.println ("Vous n'avez pas réussi à vous connecter 3 fois consécutifs, le programme quitte!"); System.exit (0); } System.out.print ("Veuillez saisir le nom d'utilisateur:"); user.SetUsename (input.next ()); System.out.print ("Veuillez entrer le mot de passe:"); user.SetUsePSD (input.next ()); System.out.print ("Veuillez saisir à nouveau le mot de passe:"); String Repassword = Input.next (); if (! user.getUsePSD (). equals (repassword)) {System.out.println ("Les mots de passe entrés deux fois sont incohérents!"); System.out.println ("***********************"); continuer; } transfert.setcmd ("registre"); transfert.setData (utilisateur); essayez {sendData (transfert); // envoyer des données au serveur transfert = getData (); // obtenez les données renvoyées par le serveur System.out.println (transfert.getResult ()); // Output Display Result System.out.println ("******************************************"); if (transfer.isflag ()) {break; // Si l'enregistrement est réussi, l'enregistrement ne sera pas répété}} catch (inconnuhostException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } Enfin {}} ShowLogin (); // Connexion après l'enregistrement réussi} // Get Server Data Public Static CommandTransfer GetData () lève IOException {// TODO Méthode générée automatiquement 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 Bloc de capture généré automatiquement e.printStackTrace (); } catch (classNotFoundException e) {// TODO Generated Catch Block E.PrintStackTrace (); } enfin {if (ois! = null) {try {ois.close (); //socket.close (); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }}} return res; } / * * Fichier de téléchargement * / private void showuploadFile () lève ioException {System.out.println ("Veuillez saisir le chemin absolu pour télécharger le fichier:"); String path = input.next (); FileInfo file = null; FileInputStream fis = null; BufferedInputStream bis = null; String fname = path.substring (path.lastIndexof ("/") + 1); try {fis = new FileInputStream (path); octet [] fcontent = nouveau octet [fis.available ()]; bis = new BufferedInputStream (FIS); bis.read (fcontent); file = new FileInfo (fName, fcontent); } catch (filenotFoundException e) {e.printStackTrace (); } enfin {bis.close (); fis.close (); } CommandTransfer Transfer = new CommandTransfer (); transfert.setcmd ("uploadfile"); transfert.setData (fichier); essayez {sendData (transfert); // envoyer des données au serveur transfert = getData (); // obtenez les données renvoyées par le serveur System.out.println (transfert.getResult ()); // Output Display result} catch (UnknownHostException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } Enfin {}} // Envoi des données au serveur public static void SendData (CommandTransfer CMD) lève ioException {// TODO Méthode générée automatiquement Stub objectOutStream oos = null; essayez {if (socket.isclosed ()) // jugez si la prise est fermée. Si elle est fermée, Open Socket = New Socket ("LocalHost", 8888); oos = new ObjectOutputStream (socket.getOutputStream ()); oos.writeObject (CMD); } catch (ioException e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }} // User se connecte à private void showlogin () lève ioException {user user = new user (); CommandTransfer Transfer = new CommandTransfer (); while (true) {System.out.print ("Veuillez saisir le nom d'utilisateur:"); user.SetUsename (input.next ()); System.out.print ("Veuillez saisir le mot de passe:"); user.SetUsePSD (input.next ()); transfert.setcmd ("connexion"); transfert.setData (utilisateur); essayez {sendData (transfert); // envoyer des données au serveur transfert = getData (); // obtenez les données renvoyées par le serveur System.out.println (transfert.getResult ()); // Sortie d'affichage System.out.println ("**********************************************"); if (transfer.isflag ()) {break; // si l'enregistrement est réussi, l'enregistrement ne sera pas répété}} catch (inconnuhostException e) {e.printStackTrace (); } catch (ioException e) {e.printStackTrace (); } Enfin {}} showuploadFile (); // Téléchargez le fichier après la connexion avec succès}}}Les rendus d'opération sont les suivants:
Le fichier a été enregistré dans la base de données. Ce projet est assez bon pour les amis qui veulent pratiquer la communication du socket et MySQL.
Ce qui précède est le socket Java + MySQL Implémentation Simple File Téléchargeur introduit par l'éditeur. J'espère que ce sera utile à tout le monde. Si vous avez des questions, veuillez me laisser un message et l'éditeur répondra à tout le monde à temps. Merci beaucoup pour votre soutien au site Web Wulin.com!