底层实现:JDBC+IO+Socket

这里写图片描述

-- ----------------------------
-- sql file
-- ----------------------------
DROP TABLE IF EXISTS `tb_file`;
CREATE TABLE `tb_file` (
  `fid` int(11) NOT NULL AUTO_INCREMENT,
  `fname` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `focntent` blob,
  PRIMARY KEY (`fid`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- ----------------------------
-- Table structure for tb_user
-- ----------------------------
DROP TABLE IF EXISTS `tb_user`;
CREATE TABLE `tb_user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `password` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

项目结构

这里写图片描述


项目源码csdn下载


核心代码

package com.imooc.socket;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;

import com.imooc.entity.File;
import com.imooc.entity.Users;
import com.imooc.service.FileService;
import com.imooc.service.UsersService;
import com.imooc.util.CommendTranser;

public class SocketClient {
    Scanner scan = new Scanner(System.in);
    private Socket socket = null;

    public void showMainMenu() {
        System.out.println("******JDBC+IO+Socket*******");
        System.out.println("1 用户登录  ,2 用户注册 ,3 退出");
        System.out.println("***************************");
        System.out.println("请选择:》》》》》》》》");
        int choose = scan.nextInt();
        switch (choose) {
            case 1:
                showlogin();
                break;
            case 2:
                showzhuce();
                break;
            case 3:
                System.out.println("再见了,你炸了");
                System.exit(0);
            default:
                System.out.println(" 输入有误");
                System.exit(0);
        }
    }

    public void showlogin() {
        Users users = new Users();
        System.out.println("欢迎使用登录");
        CommendTranser transer = new CommendTranser();
        int count = 0;
        while (true) {
            if (count >= 3) {
                System.out.println("您已经三次输入失败,再见");
                System.exit(0);
            }
            System.out.println("请输入用户名");
            users.setUsername(scan.next());
            System.out.println("请输入密码");
            users.setPassword(scan.next());
            transer.setCmd("login");
            transer.setData(users);
            count++;
            try {
                socket = new Socket("localhost", 1346);
                sendData(transer);
                transer=getDate();
                System.out.println("   " + transer.getResult());
                System.out.println("***********************");
                if (transer.isFlag()) {
                    break;
                }
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                clossAll();
            }

        }
        showUploadFile();

    }

    public void showzhuce() {
        Users users = new Users();
        System.out.println("欢迎使用注册");
        CommendTranser transer = new CommendTranser();
        while (true) {
            System.out.println("请输入用户名");
            users.setUsername(scan.next());
            System.out.println(" 请输入密码");
            users.setPassword(scan.next());
            System.out.println("请再次输入密码");
            String rePassword = scan.next();
            if (!users.getPassword().equals(rePassword)) {
                System.out.println("俩次输入不一致");
                System.out.println("**************");
                continue;
            }
            transer.setCmd("zhuce");
            transer.setData(users);
            try {
                socket = new Socket("localhost", 1346);
                sendData(transer);
                transer=getDate();
                System.out.println("  " + transer.getResult());
                System.out.println("***********************");
                if (transer.isFlag()) {
                    break;
                }
            } catch (UnknownHostException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } finally {
                clossAll();
            }
        }
        showUploadFile();
    }

    public void showUploadFile() {
        System.out.println("请输入上传的绝对路径 如: (e://imooc//dog.jpg)");
        String path = scan.next();

        File file = null;
        FileInputStream fis = null;
        BufferedInputStream bis = null;
        String fname = path.substring(path.lastIndexOf("/") + 1);
        try {
            fis = new FileInputStream(path);
            byte[] focntent = new byte[fis.available()];
            bis = new BufferedInputStream(fis);
            bis.read(focntent);
            file = new File(fname, focntent);

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                bis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        CommendTranser transer = new CommendTranser();
        transer.setCmd("uploadFile");
        transer.setData(file);
        try {
            socket = new Socket("localhost", 1346);
            sendData(transer);
            transer=getDate();
            System.out.println(transer.getResult());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            clossAll();
        }
    }


    public CommendTranser sendData(CommendTranser transer) {
        ObjectOutputStream oos=null;//对象输出流
        try {
            oos=new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(transer);
            return transer;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }


    public CommendTranser  getDate(){
        ObjectInputStream ois =null;//对象输入流
        CommendTranser transer = null;
        try {
            ois=new ObjectInputStream(socket.getInputStream());
            transer= (CommendTranser) ois.readObject();
        } catch (IOException e) {
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
        return transer;
    }

    public void clossAll() {
        try {
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}


package com.imooc.socket;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class SocketServer {
    public static void main(String[] args) {
        try {
            ServerSocket serversocket=new ServerSocket(1346);
            Socket socket=null;
            System.out.println("");
            while(true){
                socket=serversocket.accept();
                System.out.println("欢迎您..");
                //开启多线程
                SocketThread thread=new SocketThread(socket);
                thread.start();

            }
        } catch (IOException e) {
            e.printStackTrace();
        }


    }
}

package com.imooc.socket;

/**
 * 开启客户端
 */
public class SocketStart {
    public static void main(String[] args) {
        SocketClient client=new SocketClient();
        client.showMainMenu();
    }
}


package com.imooc.socket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;

import com.imooc.entity.File;
import com.imooc.entity.Users;
import com.imooc.service.FileService;
import com.imooc.service.UsersService;
import com.imooc.util.CommendTranser;

public class SocketThread  extends Thread{

    private Socket socket=null;
    private ObjectInputStream ois =null;//对象输入流
    private ObjectOutputStream oos=null;//对象输出流
    private UsersService us=new UsersService();//用户业务对象
    private FileService fs=new FileService();//文件业务对象
    //通过构造方法,初始化socket
    public SocketThread (Socket socket){
        this.socket=socket;
    }
    @Override
    public void run() {
        try {
            ois=new ObjectInputStream(socket.getInputStream());
            oos=new ObjectOutputStream(socket.getOutputStream());
            CommendTranser transer=(CommendTranser)ois.readObject();
            transer=execute(transer);
            oos.writeObject(transer);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public CommendTranser execute(CommendTranser transer){
        String cmd =transer.getCmd();
        if(cmd.equals("login")){
            Users users=(Users)transer.getData();
            boolean flag=us.Denglu(users);
            transer.setFlag(flag);
            if(flag){
                transer.setResult("登录成功");
            }else{
                transer.setResult("用户名或密码不正确");
            }
        }else if(cmd.equals("zhuce")){
            Users users=(Users)transer.getData();
            us.zhuce(users);
            boolean flag= us.Denglu(users);
            transer.setFlag(flag);
            if(flag){
                transer.setResult("注册成功");
            }else{
                transer.setResult("注册失败,未知原因");

            }
        }else if(cmd.equals("uploadFile")){
            File file=(File)transer.getData();
            fs.savefile(file);
            transer.setResult(" 上传成功");
        }
        return transer;
    }

}

猜你喜欢

转载自blog.csdn.net/m0_37499059/article/details/80473410