Недавно я выучил небольшой проект с определенного сайта. Поскольку у меня есть занятия в течение дня, я написал их все ночью. Я закончил его сегодня.
Проект в основном реализует загрузчик файла, загружая локальные файлы в базу данных сервера (локальный) через клиент.
Сначала создайте две таблицы следующим образом:
Таблица информации о файле
Создать таблицу `fileinfo` (` fname` char (50) не нулевой, `finfo` blob не null,` fid` int (10) не null auto_increment, первичный ключ (`fid`)) engine = innodb auto_increment = 4 default charset = utf8;
Таблица информации пользователя
Создать таблицу `user` (` username` char (25) не null, `password` char (25) не null,` usdiD` int (10) не null auto_increment, первичный ключ (`usdid`)) engine = innodb auto_increment = 19 default charset = utf8;
Пользовательский класс
пакет FileUpload; импортировать java.io.serializable; /** Класс объектов пользователя*/ Общедоступный пользователь пользователь реализует serializable {private Static Long Long Serialversionuid = -7279093338433393181L; private int ssisiD; // номер пользователя private String usename; // Имя пользователя Private String usePsd; // пароль пользователя public user () {} public user (string usename, string usepsd) {super (); this.usEname = Usename; this.usepsd = usepsd; } public user (int ssisiD, string usename, string usepsd) {super (); this.useid = ssisiD; this.usEname = Usename; this.usepsd = usepsd; } public int getUseId () {return ssistId; } public void setUSEID (intsyDID) {this.USEID = SOODID; } 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; }}Класс пользователей
пакет FileUpload; / *** Класс работы пользователя и регистрации*/ import java.sql.connection; Импорт java.sql.drivermanager; Импорт java.sql.preparedStatement; импортировать java.sql.resultset; Импорт java.sql.sqlexception; открытый класс userservice {частное соединение conn = null; Private Prosestatement Ptmt = null; Частный результат RS = NULL; // Пользовательский вход в систему public Boolean Login (пользователь пользователя) {string url = "jdbc: mysql: // localhost: 3306/fileupload"; // Строка подключения базы данных SQL = "SELECT * из пользователя, где userName =? И пароль =?"; try {class.forname ("org.gjt.mm.mysql.driver"). newinstance (); conn = drivermanager.getConnection (URL, "root", "1995520"); ptmt = conn.preprestatement (sql); ptmt.setString (1, user.getUseName ()); ptmt.setString (2, user.getUsepsd ()); rs = ptmt.executequery (); if (rs.next ()) {return true; }} catch (Exception e) {e.printstackTrace (); } наконец {try {rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} вернуть false; } // Регистрация пользователя Public Boolean Register (пользователь пользователя) {System.out.println ("hello"); String url = "jdbc: mysql: // localhost: 3306/fileupload"; // Строка подключения базы данных sql = "Вставка в пользовательский (username, пароль) значения (?,?)"; try {class.forname ("org.gjt.mm.mysql.driver"). newinstance (); conn = drivermanager.getConnection (URL, "root", "1995520"); ptmt = conn.preprestatement (sql); ptmt.setString (1, user.getUseName ()); ptmt.setString (2, user.getUsepsd ()); ptmt.executeupdate (); } catch (Exception e) {e.printstackTrace (); вернуть ложь; } наконец {try {//rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} вернуть true; }}Fileiofo Class
пакет FileUpload; импортировать java.io.serializable; /** Файл объекта класса*/ public class fileinfo реализует serializable {private static final long serialversionuid = 255462262628481455l; private int fid; // номер файла private string fname; // имя файла private byte [] fcontent; // Содержимое файла 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; } public byte [] getFcontent () {return fcontent; } public void setFcontent (byte [] fcontent) {this.fcontent = fcontent; }}Fileservice Class
пакет FileUpload; / *** Класс операции загрузки файла*/ import java.sql.connection; Импорт java.sql.drivermanager; Импорт java.sql.preparedStatement; Импорт java.sql.sqlexception; public Class fileservice {частное соединение conn = null; Private Prosestatement Ptmt = null; // Сохранить файл в базу данных public boolean save (fileinfo file) {string url = "jdbc: mysql: // localhost: 3306/fileupload"; // string connection string database sql = " try {class.forname ("org.gjt.mm.mysql.driver"). newinstance (); conn = drivermanager.getConnection (URL, "root", "1995520"); ptmt = conn.preprestatement (sql); ptmt.setString (1, file.getFname ()); ptmt.setbytes (2, file.getfcontent ()); ptmt.executeupdate (); } catch (Exception e) {e.printstackTrace (); вернуть ложь; } наконец {try {ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} вернуть true; }} пакет FileUpload;
импортировать java.io.ioexception; импортировать java.net.serversocket; импортировать java.net.socket; /** Start Server Class*/ Public Class Startererver {@suppresswarnings ("resource") public static void main (string [] args) {try {// 1. Создание сокета на стороне сервера, то есть Serversocket, укажите граничный порт и прослушивает этот порт serversocket = new Serversocket (8888); Сокет сокет = null; System.out.println («Сервер был запущен, ожидая, когда клиент сможет подключиться ...»); // в данный момент прислушиваемся к подожему подключения клиента, пока (true) {// 2. Вызовите метод Accept (), чтобы начать прослушивание, ожидая сокета подключения клиента = serversocket.accept (); // Создать новую потоку ServerThread ServerThread = New ServerThread (Socket); // запустить Thread ServerThread.Start (); }} catch (ioException e) {// автоматически сгенерированный блок улова todo e.printstacktrace (); }}}} [java] Просмотр простых копий просмотр срезы кода, полученные из My Code Scecdate Package FileUpload; импортировать java.io.ioexception; / ** * Запустить клиент класс */ public class startClient {public static void main (string [] args) бросает ioException {socketClient client = new SocketClient (); client.showmainmenu (); // Показать главное меню}}пакет FileUpload;
импортировать java.io.ioexception; импортировать java.io.objectinputstream; Импорт java.io.objectOutputStream; импортировать java.net.socket; импортировать javax.swing.joptionpane; /** Серверная многопоточная класс*/ public Class ServerThread Extends Thread {Static Socket Socket = null; Private Static ObjectInputStream OIS = null; // Object Input Stream Private ObjectPutStream OOS = null; // Object Outlow Stream private userservice us = new userservice (); // Пользовательский бизнес -объект Private Fileservice fs = new Fileservice (); // File Business Object // initialize socket public servertread (socket socket) {serverthread.socket = socket socket; } public void run () {try {ois = new ObjectInputStream (socket.getInputStream ()); // Приема сообщений, отправленных клиентом oos = new objectOutputStream (socket.getOutputStream ()); // Используется для отправки сообщений в Client CommandTransfer Transfer = (commandTransfer) ois.ReadoBject (); // Читать операцию команды, отправленную клиентом на сервер Transfer = execute (Transfer); // выполнить операцию команды, отправленную клиентом на сервер oos.writeObject (transfer); // отвечать на клиент} catch (ioException | classnotfoundexception e) {e.printstacktrace (); }}/** Выполнить операцию команды, отправленную клиентом на сервер*/ private commandTransfer execute (commandTransfer transfer) {string cmd = transper.getCmd (); // Получить команду для текущей операции if (cmd.equals ("login")) {// Пользователь пользователя пользователь пользователь = (пользователь пользователя) transper.getData (); логический флаг = us.login (пользователь); if (flag) joptionpane.showmessageDialog (null, «Вход успешно!»); Transfer.SetFlag (flag); if (flag) {// судить, является ли логин успешным Transfer.SetResult («Вход успешно!»); } else {transfer.setResult ("Имя или пароль пользователя неверно, пожалуйста, войдите в систему!"); }} else if (cmd.equals ("Register")) {// пользователь пользователь пользователь = (пользователь) transfer.getData (); us.register (пользователь); // регистрация пользователя Boolean Flag = US.Register (пользователь); if (flag) joptionpane.showmessagedialog (null, "Зарегистрируется успешно!"); Transfer.SetFlag (flag); if (flag) {transfer.setResult ("Зарегистрировать успешно!"); } else {transfer.setResult ("Регистр не удался!"); }} else if (cmd.equals ("uploadfile")) {fileInfo file = (fileInfo) transper.getData (); fs.save (файл); логический флаг = fs.save (файл); if (flag) joptionpane.showmessagedialog (null, "загруженная успешно!"); Transfer.SetFlag (flag); if (flag) {transfer.setResult («Загружено успешно!»); } else {transfer.setResult ("upload не удалась!"); }} return Transfer; }} 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; / ** * Класс главного меню */ public class socketClient {scanner input = new Scanner (System.in); Private Static Socket Socket = null; // Client Socket // Main Menu public void showmainmenu () Throws ioException {System.out.println ("****** Добро пожаловать в xx file uploader *******"); System.out.println ("1.login/n2.register/n3.login"); System.out.println("************************************"); System.out.println («Пожалуйста, выберите:»); int Choice = input.nextint (); // Получить выбор пользователя сокет = новый сокет ("LocalHost", 8888); Switch (Choice) {case 1: showLogin (); // Войдите в систему, чтобы сломать; Случай 2: showgister (); // Зарегистрировать перерыв; Случай 3: System.out.println («Добро пожаловать, чтобы поддержать эту систему»); System.Exit (0); по умолчанию: System.out.println («Ввод неверный!»); System.Exit (0); }} // Регистрация пользователя private void showregister () бросает ioException {user user = new user (); CommandTransfer transfer = new CommandTransfer (); int count = 0; // количество времен входа в систему while (true) {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 («Пожалуйста, введите пароль снова:»); String repassword = input.next (); if (! user.getUsepsd (). equals (repassword)) {System.out.println («Введенные пароли дважды несовместимы!»); System.out.println ("*********************"); продолжать; } transfer.setCmd ("Register"); Transfer.SetData (пользователь); try {senddata (transfer); // Отправить данные на сервер Transfer = getData (); // Получить данные, возвращаемые Server System.out.println (Transfer.getResult ()); // Выходная система результата. if (transfer.isflag ()) {break; // Если регистрация успешна, регистрация не будет повторена}} catch (Unknownhostexception e) {e.printStackTrace (); } catch (ioException e) {e.printstackTrace (); } наконец {}} showlogin (); // Вход после успешного регистрации} // Получить данные сервера общедоступного статического CommandTransfer getData () Throws IOException {// TODO автоматически генерируемый метод stubStream ois = null; CommandTransfer res = null; попробуйте {if (socket.isclosed ()) socket = new Socket ("localhost", 8888); OIS = new ObjectInputStream (socket.getInputStream ()); res = (commandTransfer) OIS.ReadObject (); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); } catch (classnotfoundexception e) {// todo автоматически сгенерированный блок e.printstacktrace (); } наконец {if (ois! = null) {try {ois.close (); //socket.close (); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); }}} return res; } /** Upload file* / private void showuploadFile () бросает ioException {System.out.println («Пожалуйста, введите абсолютный путь для загрузки файла:»); 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); byte [] fcontent = new Byte [fis.avialable ()]; bis = new 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 (файл); try {senddata (transfer); // отправить данные на сервер Transfer = getData (); // Получить данные, возвращаемые Server System.out.println (transfer.getResult ()); // Результат отображения вывода} Catch (Unknownhostexception e) {e.printStackTrace (); } catch (ioException e) {e.printstackTrace (); } наконец {}} // Отправить данные на сервер public static void senddata (commandtransfer cmd) бросает ioException {// todo автоматически генерируемое метод objectOutputStream oos = null; Попробуйте {if (socket.isclosed ()) // Судите, закрыт ли сокет. Если закрыто, Open Socket = New Socket ("Localhost", 8888); oos = new objectOutputStream (socket.getOutputStream ()); oos.writeObject (cmd); } catch (ioException e) {// todo автоматически сгенерированный блок e.printstacktrace (); }} // Пользователи входят в частное void showlogin (), которое вызывает ioException {user user = new user (); CommandTransfer transfer = new CommandTransfer (); while (true) {System.out.print («Пожалуйста, введите имя пользователя:»); user.setusEname (input.next ()); System.out.print («Пожалуйста, введите пароль:»); user.setusepsd (input.next ()); Transfer.SetCmd ("login"); Transfer.SetData (пользователь); try {senddata (transfer); // Отправить данные на сервер Transfer = getData (); // Получить данные, возвращаемые системой сервера. if (transfer.isflag ()) {break; // Если регистрация успешна, регистрация не будет повторена}} catch (Unknownhostexception e) {e.printStackTrace (); } catch (ioException e) {e.printstackTrace (); } наконец {}} showuploadFile (); // загрузить файл после успешного входа}}}Операция визуализации следующие:
Файл был сохранен в базе данных. Этот проект довольно хорош для друзей, которые хотят практиковать общение сокетов и MySQL.
Выше приведено в реализации Java Socket+MySQL простой загрузчик файлов, представленный редактором. Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!