최근에 나는 특정 웹 사이트에서 작은 프로젝트를 배웠습니다. 낮에는 수업이 있기 때문에 밤에 모두 썼습니다. 나는 오늘 그것을 완료했다.
이 프로젝트는 주로 파일 업 로더를 구현하고 클라이언트 로그인을 통해 로컬 파일을 서버의 데이터베이스 (로컬)에 업로드합니다.
먼저 다음과 같이 두 개의 테이블을 만듭니다.
파일 정보 테이블
테이블 만들기`fileInfo` (`fname` char (50) NOL NOT NULL,`FINFO` BLOB NULL NULL NULL,`FID` int (10) NOT AUTO_INCREMENT, 1 차 키 (`FID`)) 엔진 = innodb Auto_Increment = 4 기본 충전소 = UTF8;
사용자 정보 테이블
테이블 만들기`user` (`username` char (25)가 아닌 char (25),`password` char (25) null not null,`useid` int (10) not null auto_increment, 기본 키 (`usiceid`)) 엔진 = innodb auto_increment = 19 기본 charset = utf8;
사용자 클래스
패키지 fileUpload; java.io.serializable import; /** 사용자 엔티티 클래스*/ 공개 클래스 사용자는 시리얼이즈 가능 {private static final long serialversionuid = -72790933338433393181L; private int useid; // 사용자 번호 비공개 문자열 useename; // 사용자 이름 private string usepsd; // 사용자 암호 public user () {} public user (String Usename, String Usepsd) {super (); this.usename = useName; this.usepsd = usepsd; } public user (int useid, string useename, 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; }}uservice 클래스
패키지 fileUpload; / *** 사용자 로그인 및 등록 작업 클래스*/ import java.sql.connection; Java.SQL.DriverManager 가져 오기; Java.sql.preparedStatement import; java.sql.resultset import; java.sql.sqlexception 가져 오기; 공개 클래스 사용자 서비스 {private connection conn = null; 개인 준비 상태 PTMT = NULL; 개인 결과 세트 RS = NULL; // 사용자 로그인 public boolean login (user user) {String url = "jdbc : mysql : // localhost : 3306/fileUpload"; // 데이터베이스 연결 문자열 string sql = "select *에서 username =? and password =?"; {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 (예외 e) {e.printstacktrace (); } 마침내 {try {rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} 거짓을 반환합니다. } // 사용자 등록 공개 부울 레지스터 (사용자) {System.out.println ( "Hello"); String URL = "JDBC : MySQL : // localHost : 3306/fileUpload"; // 데이터베이스 연결 문자열 string sql = "user in user (username, password) 값 (?,?)"; {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 (예외 e) {e.printstacktrace (); 거짓을 반환합니다. } 마침내 {try {//rs.close (); ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} true를 반환합니다. }}FileIofo 클래스
패키지 fileUpload; java.io.serializable import; /** 파일 엔티티 클래스*/ public class fileInfo는 시리얼이즈 가능한 {private static final long serialversionUID = 25546226228481455L; private int fid; // 파일 번호 개인 문자열 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 클래스
패키지 fileUpload; / *** 파일 업로드 작업 클래스*/ 가져 오기 java.sql.connection; Java.SQL.DriverManager 가져 오기; Java.sql.preparedStatement import; java.sql.sqlexception 가져 오기; 공개 클래스 파일 서비스 {private connection conn = null; 개인 준비 상태 PTMT = NULL; // 파일을 데이터베이스 공개 부울 저장 (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 (예외 e) {e.printstacktrace (); 거짓을 반환합니다. } 마침내 {try {ptmt.close (); } catch (sqlexception e) {e.printstacktrace (); }} true를 반환합니다. }} 패키지 fileUpload;
import java.io.ioexception; import java.net.serversocket; import java.net.socket; /** start server class*/ public class starterver {@suppresswarnings ( "resource") public static void main (string [] args) {try {// 1. Serversocket, 즉 ServerSocket을 지정하고 Serversocket = New Serversocket (8888)을 듣습니다. 소켓 소켓 = null; System.out.println ( "서버가 시작되었습니다. 클라이언트가 연결되기를 기다리고 있습니다 ..."); // 클라이언트의 연결을 기다리는 동안 (true) {// 2. accept () 메소드를 호출하여 청취를 시작하고 클라이언트의 연결 소매를 기다리고 있습니다. // 새 스레드 생성 Serverthread serverthread = new ServerThread (Socket); // 스레드 serverthread.start ()를 시작합니다. }} catch (ioException e) {// TODO의 자동으로 생성 된 캐치 블록 E.PrintStackTrace (); }}}} [java] 내 코드 조각에서 파생 된 평범한 사본보기 코드 슬라이스 view fileUpload; import java.io.ioexception; / ** * 클라이언트 클래스 시작 */ public class startClient {public static void main (string [] args)은 ioexception {socketclient client = new Socketclient (); client.showmainmenu (); // 메인 메뉴 표시}}}패키지 fileUpload;
import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputStream; import java.net.socket; import javax.swing.joptionpane; /** 서버 측 Multithreading 클래스*/ public class serverthread는 스레드 {static socket socket = null; 개인 정적 ObjectInputStream OIS = NULL; // 객체 입력 스트림 개인 objectOutputStream OOS = NULL; // 객체 출력 스트림 PRIVATE USERSERVICE US = New UsersErvice (); // 사용자 비즈니스 객체 개인 파일 서비스 FS = New FileserVice (); // Socket Public ServerThread (Socket Setket) {Serverththread.sockets = Socketer; } public void run () {try {OIS = new ObjectInputStream (socket.getInputStream ()); // 클라이언트가 보낸 메시지 수신 oos = new ObjectOutputStream (socket.getOutputStream ()); // 클라이언트로 메시지를 보내는 데 사용됩니다. // 클라이언트가 서버 전송으로 보낸 명령 작업을 읽습니다. // 클라이언트가 서버로 보낸 명령 작업을 서버 OOS.writeObject (송신); // 클라이언트에 응답} catch (ioException | classNotFoundException e) {e.printstacktrace (); }}/** 클라이언트가 서버로 보낸 명령 조작을 실행합니다*/ private CommuntTransfer Execute (ClientTransfer 전송) {String CMD = 송신); // 현재 작업에 대한 명령을 가져옵니다. 부울 플래그 = us.login (사용자); if (flag) joptionpane.showmessagedialog (null, "성공적으로 로그인!"); 송신 .setflag (플래그); if (flag) {// 로그인이 성공적인 전송 여부를 판단합니다. } else {transfer.setResult ( "사용자 이름 또는 비밀번호가 올바르지 않아 다시 로그인하십시오!"); }} else if (cmd.equals ( "register")) {// 사용자 등록 사용자 user = (사용자) 송금 .getData (); us.register (user); // register user boolean flag = us.register (user); if (flag) joptionpane.showmessagedialog (null, "Register!"); 송신 .setflag (플래그); if (flag) {transfer.setResult ( "Register 성공!"); } else {transfer.setResult ( "Register 실패!"); }} else if (cmd.equals ( "uploadfile")) {fileInfo file = (fileInfo) 송환 .getData (); fs.save (파일); 부울 플래그 = fs.save (파일); if (flag) joptionpane.showmessagedialog (null, "성공적으로 업로드!"); 송신 .setflag (플래그); if (flag) {transfer.setResult ( "성공적으로 업로드!"); } else {송신 .setResult ( "업로드 실패!"); }} 반환 전송; }} 패키지 fileUpload; import java.io.bufferedInputStream; import java.io.fileInputStream; import java.io.filenotfoundException; import java.io.ioexception; import java.io.objectinputstream; import java.io.objectoutputStream; import java.net.socket; import java.net.unknownhostexception; java.util.scanner import; / ** * 메인 메뉴 클래스 */ public class socketclient {스캐너 입력 = 새 스캐너 (System.In); 개인 정적 소켓 소켓 = null; // 클라이언트 소켓 // 메인 메뉴 공개 void showmainmenu ()는 ioException {System.out.println ( "****** XX 파일 업 로더에 오신 것을 환영합니다 *********"); System.out.println ( "1.login/n2.register/n3.login"); system.out.println ( "******************************************************************************************************************************************************************************************************************************************* System.out.println ( "선택 :"); int choce = input.nextint (); // 사용자 선택 소켓 get socket = new Socket ( "localhost", 8888); switch (선택) {case 1 : showlogin (); // 로그인하여 중단; 사례 2 : showregister (); // 레지스터 브레이크; 사례 3 : System.out.println ( "이 시스템 지원에 오신 것을 환영합니다"); System.exit (0); 기본값 : System.out.println ( "입력이 잘못되었습니다!"); System.exit (0); }} // 사용자 등록 개인 void showregister ()는 ioexception {user user = new user (); CommandTransfer 전송 = New CommuntTransfer (); int count = 0; // 로그인 시간 수 (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 ( "비밀번호를 다시 입력하십시오 :"); 문자열 repassword = input.next (); if (! user.getusepsd (). equals (repassword)) {system.out.println ( "두 번 입력 한 암호는 일관성이 없다!"); System.out.println ( "******************************"); 계속하다; } transfer.setcmd ( "register"); 송신 .setData (사용자); {sendData (송신); // 서버로 데이터를 전송합니다 = getData (); // 서버 시스템에서 반환 된 데이터를 가져옵니다. if (transfer.isflag ()) {break; // 등록이 성공하면 등록이 반복되지 않습니다}} catch (unknownhostexception e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); } morne {}} showlogin (); // 등록 후 로그인이 성공한 후 로그인} // 서버 데이터 가져 오기 공개 static contifttransfer getData ()는 ioexception {// todo 자동 생성 메소드 stub objectinputstream ois = null; COMMINTTRANSFER RES = NULL; try {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; } /** 파일 업로드* / private void showUploadFile ()는 ioException {System.out.println ( "파일을 업로드하려면 절대 경로를 입력하십시오 :"); 문자열 path = input.next (); fileInfo file = null; fileInputStream fis = null; bufferedInputStream bis = null; 문자열 fname = path.substring (path.lastindexof ( "/") + 1); try {fis = new FileInputStream (Path); 바이트 [] fcontent = 새로운 바이트 [fis.available ()]; BIS = 새로운 BufferedInputStream (FIS); bis.read (fcontent); file = new FileInfo (fname, fcontent); } catch (filenotfoundException e) {e.printstacktrace (); } 마침내 {bis.close (); fis.close (); } CommandTransfer 전송 = New CommuntTransfer (); 송신 .setcmd ( "uploadfile"); 송신 .setData (파일); {senddata (송신); // 서버로 데이터를 전송합니다 = getData (); // 서버 시스템에서 반환 된 데이터를 가져옵니다. out.println (송신. getResult ()); // output display} catch (unknownHostexception e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); } 마지막으로 {}} // 서버로 데이터를 보내십시오 public static void sendData (CLECTIONTRANSFER CMD)는 ioException {// todo 자동 생성 메소드 Stub ObjectOutputStream oos = null; {if (socket.isclosed ()) // 소켓이 닫혀 있는지 판단하십시오. 닫으면 소켓을 열면 새 소켓 ( "LocalHost", 8888); OOS = 새로운 ObjectOutputStream (socket.getOutputStream ()); oos.writeobject (CMD); } catch (ioexception e) {// todo 자동 생성 캐치 블록 e.printstacktrace (); }} // 사용자 로그인 개인 void showlogin ()가 ioexception {user user = new user (); CommandTransfer 전송 = New CommuntTransfer (); while (true) {system.out.print ( "사용자 이름을 입력하십시오 :"); user.setuseName (input.next ()); System.out.print ( "비밀번호를 입력하십시오 :"); user.setusepsd (input.next ()); Transfer.setCmd ( "로그인"); 송신 .setData (사용자); {senddata (송신); // 서버로 데이터를 전송합니다 = getData (); // 서버 시스템에서 반환 한 데이터를 가져옵니다. if (transfer.isflag ()) {break; // 등록이 성공하면 등록이 반복되지 않습니다}} catch (unknownhostexception e) {e.printstacktrace (); } catch (ioexception e) {e.printstacktrace (); } morne {}} showUploadFile (); // 로그인 후 파일 업로드}}}}작동 렌더링은 다음과 같습니다.
파일은 데이터베이스에 저장되었습니다. 이 프로젝트는 소켓 커뮤니케이션과 MySQL을 연습하려는 친구들에게 매우 좋습니다.
위의 것은 편집자가 소개 한 Java Socket+MySQL 구현 간단한 파일 업 로더입니다. 모든 사람에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 모든 사람에게 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!