项目:Socket实现聊天(注册,登录(删除,查看,修改),聊天(单人,多人),连接数据库)

Login

import java.sql.SQLException;
import java.util.Scanner;

 public class Login {
	
	public static  void main(String[] args)   {			
		
		System.out.println("1:注册  2:登录 3:聊天");
			Scanner input = new Scanner(System.in);
			int i =input.nextInt();			
				switch(i) {
				case 1:
					new LoginService().add();
					break;
				case 2:
					try {
						String register =new LoginService().register();//登录
						while(true) {
							System.out.println("a:删除  b:显示信息  c:更改信息  ");
							Scanner input1 = new Scanner(System.in);
							String j =input1.next();
							String a = "a",b="b",c="c",d="d";
								if(j.equals(a)) {
									try {
										new LoginService().delete();
									} catch (ClassNotFoundException e) {
										// TODO Auto-generated catch block
										e.printStackTrace();
									} catch (SQLException e) {
										// TODO Auto-generated catch block
										e.printStackTrace();
									}
			
								}else if(j.equals(b)){
									new LoginService().show1(register);
									
								}else if(j.equals(c)){
									new LoginService().update();
								}
						}
					} catch (ClassNotFoundException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					} catch (SQLException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}															
				case 3:
					new LoginService().talk();//聊天
				}																
		}
	}

LoginService

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


public class LoginService {
	private Connection connection ;
	private String user_account;
	private String  user_code;
	private String user_name;
	
	public void add() {//注册
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat", "root", "123456");
			Scanner input = new Scanner(System.in);
			System.out.println("请注册账号:");
			user_account =input.next();
			System.out.println("请输入密码:");
			user_code =input.next();
			System.out.println("请输入姓名:");
			user_name =input.next();
			String sql = "insert into user (user_account,user_code,user_name) values(?,?,?)";
			PreparedStatement a = connection.prepareStatement(sql);
			a.setString(1,user_account);
			a.setString(2,user_code);
			a.setString(3,user_name);			
		    int rs = a.executeUpdate();
			    if(rs>0){
			    	System.out.println("注册成功!重新登录!!!");
			    	if(a!=null) {//注册完后关闭数据库;
			    		a.close();
			    	}if(connection!=null) {
			    		connection.close();			    		
			    	}			    				    	
			    } else
					System.out.println("注册失败!");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	
	
	Socket socket1 = null;
	PrintWriter printWriter=null;
	String name;
	public String register() throws ClassNotFoundException, SQLException{//登录
		Class.forName("com.mysql.jdbc.Driver");
		connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat", "root", "123456");        
        Scanner scanner=new Scanner(System.in);
		System.out.print("账号:");
		String s=scanner.next();
		System.out.print("密码:"); 
		String d=scanner.next();
				
		String sql = "SELECT * FROM  user WHERE user_account=? AND user_code=?";	  
		PreparedStatement b = connection.prepareStatement(sql);//执行数据库语句	
		b.setString(1,s);
		b.setString(2,d);	
	    ResultSet rs = b.executeQuery();//执行查询方法	
	    if(rs.next()) {
	    	String  name = rs.getString(1);	    	  
	    	System.out.println(name+"登录成功!");
	    	return s;
	    }else {
	    	System.out.println("登录失败!请重新登录!!!");
	    	register();
	    	
	    }	
	    return s;
	}
		
	
	
	public void delete() throws ClassNotFoundException, SQLException {//删除
		Scanner scanner = new Scanner(System.in);
		System.out.println("您确定要注销您的账户吗?");
		System.out.println("确定请按1,取消请按2");
		int ok = scanner.nextInt();
		if (ok == 1) {
			System.out.println("请输入您要注销的账号");
			String  user_account = scanner.next();
			System.out.println("请输入您的密码");
			String user_code = scanner.next();
						
			String	user_code1 = pwd(user_account);			
			if(user_code.equals(user_code1)) {
				System.out.println("继续请按1,取消请按2");
				int ok2 = scanner.nextInt();
				if (ok2 == 1) {
					delete1(user_account);					
			    }else if(ok2==2) {
			    	System.out.println("取消删除!!");
			    }
			}else {
				System.out.println("输入的密码错误");
			}			
		}else if(ok==2) {
			System.out.println("取消删除!!");
		}
	}				
	public void delete1(String user_account) {
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat", "root", "123456");
			String sql = "delete  from user where user_account='"+user_account+"'";
			PreparedStatement b = connection.prepareStatement(sql);
			int rs = b.executeUpdate();// 返回值代表收到影响的行数
		    if(rs>0) {
		    	System.out.println("删除成功");
		    }else {
		    	System.out.println("删除失败");
		    }
		    if(b!=null) {
		    	b.close();
		    }
		    if(connection!=null) {
		    	connection.close();
		    }
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}		
	private String pwd(String user_account) throws SQLException, ClassNotFoundException {
		
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat", "root", "123456");
			String sql = "select user_code  from user where user_account = '"+user_account+"' ";
			PreparedStatement ps = connection.prepareStatement(sql);
			ResultSet rs = ps.executeQuery();
			String pwd = "";
			if (rs.next()) {
				pwd = rs.getString(1);
			}
	return pwd;
    }



	public void show1(String user_account) {//查看信息
		System.out.println("姓名"+"\t"+"密码"+"\t"+"账号"+"\t");
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat", "root", "123456");
			String sql = "select *  from user where user_account = '"+user_account+"'";
			Statement m = connection.createStatement();
			ResultSet rs = m.executeQuery(sql);
			while(rs.next()) {
					String c1 = rs.getString(1); 
					String c2 = rs.getString(2);
					String c3 = rs.getString(3);
					System.out.println(c1+"\t"+c2+"\t"+c3+"\t");	
			}
			if(rs!=null) {
				rs.close();
			}
			if(connection!=null) {
				connection.close();
			}						
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	
	}
	

	
	public  void update() {	//更新信息
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat", "root", "123456");
			Scanner i = new Scanner(System.in);
			System.out.println("请输入要修该的账号:");
			user_account =i.next();
			System.out.println("请输入修改的密码:");
			user_code =i.next();
			System.out.println("请输入修改的姓名:");
			user_name =i.next();
			String sql="update user set user_name=?,user_code=? where user_account='"+user_account+"'";
			 Statement createStatement = connection.createStatement();
			 PreparedStatement b = connection.prepareStatement(sql);
			b.setString(1, user_name);
			b.setString(2, user_code);
			int rr = b.executeUpdate();
		    if(rr>0){
		    	System.out.println("更新成功!");			
			b.close();
			createStatement.close();	
		    }else {
		    	System.out.println("更新失败!!");
		    }		    
		}catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}	
	}
	
	
	
	String i= null;
	public void talk() {//聊天
		try {
			Class.forName("com.mysql.jdbc.Driver");
			connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/chat", "root", "123456");
			Scanner scanner=new Scanner(System.in);
			System.out.print("聊天账号:");
			String s =scanner.next();
			System.out.print("聊天密码:"); 
			String d=scanner.next();
			String sql = "SELECT * FROM  user WHERE user_account=? AND user_code=?";
			PreparedStatement b = connection.prepareStatement(sql);
			b.setString(1,s);
			b.setString(2,d);
			ResultSet rs = b.executeQuery();//执行查询方法
			
		    if(rs.next()) {
		    	String  name = rs.getString(1);
		    	System.out.println(name+"开始聊天");
		    	System.out.println("单聊提示 —— @姓名:");
				try {
					Socket socket = new Socket("172.16.9.19",8080);
					ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
					BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
					OutputStream outputStream = socket.getOutputStream();
					printWriter = new PrintWriter(outputStream);
					newCachedThreadPool.execute(new Test02Read(name,bufferedReader));
					newCachedThreadPool.execute(new Test02Writer(name,printWriter));
				} catch (UnknownHostException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}			
		}else {
			System.out.println("聊天失败");
			talk();
		}
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}	    
	
	}

    }

Service

import java.io.IOException;

import java.net.ServerSocket;
import java.net.Socket;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;


    public class Service {
	public static void main(String[] args) {
		ServerSocket serverSocket=null;
		Socket accept = null;
	    try {
		  serverSocket = new ServerSocket(8080);
		  ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();			
			  
			int i=1;
			while(true) {
				System.out.println("等待客户端:");
				accept = serverSocket.accept();//accept方法返回对象Socket,阻塞				
						System.out.println("第"+i+"位客户来访");
						i++;					
					newCachedThreadPool.execute(new TestService(accept));															
			}						
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			try {				
				accept.close();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}   		
		}
	}
    } 



## TestService

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

    public class TestService implements Runnable {
	public static List<BufferedReader> bufferedReaderList = new ArrayList<>();
    public static List<PrintWriter> printWriterList = new ArrayList<>();
	private Socket accept=null;
	public TestService(Socket accept) {
		this.accept = accept;
	}

	@Override
	public void run() {
		// TODO Auto-generated method stub					
			BufferedReader bufferedReader=null;
			PrintWriter printWriter=null;
			try {
				Scanner scanner = new Scanner(System.in);
				bufferedReader = new BufferedReader(new InputStreamReader(accept.getInputStream()));
				printWriter = new PrintWriter(accept.getOutputStream());
				bufferedReaderList.add(bufferedReader);
				printWriterList.add(printWriter);
				while(true) {					
					String i= null;
					String j=null;
					int k = 0;
					if ((i = bufferedReader.readLine()) != null) {
						for(PrintWriter a:printWriterList) {
							if (i.startsWith("**")) {								
								int indexOf = i.lastIndexOf("*");
								String substring = i.substring(indexOf + 1);
								int indexOf2 = substring.indexOf("=");
								String substring2 = substring.substring(1, indexOf2);//名字
								if (k == 0) {
									System.out.println(substring2 + "刚刚说话啦!");
									k++;
								}																
								int indexOf3 = substring.indexOf("}");
								String substring3 = substring.substring(indexOf2 + 1, indexOf3);// 消息内容
								if (a == printWriter) {
									continue;
								} else {
									a.println(substring3);
									a.flush();
								}							
						}							
						}	
			}
				}		
			}	catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally {
				try {
					bufferedReader.close();
					printWriter.close();
					accept.close();
				} catch (IOException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}   		
			}
		}
    }

Test02Read

import java.io.BufferedReader;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;




    public class Test02Read implements Runnable{
	private BufferedReader bufferedReader;
	private String name;
	public Test02Read(String name,BufferedReader bufferedReader) {
		this.bufferedReader = bufferedReader;
		this.name=name;
		
	}
	@Override
	public void run() {
		Socket socket = null;
		PrintWriter printWriter=null;
		String i = null;
		
		
		try {
			while((i=bufferedReader.readLine())!=null) {
				Date date = new Date();
				SimpleDateFormat simpleDateFormate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
				if (i.startsWith("@")) {
					int indexOf4 = i.indexOf(":");
					String substring4 = i.substring(1, indexOf4);// @名字:---substring4
					String substring5 = i.substring(indexOf4 + 1);// 要发送的消息
					
					
					if (name.equals(substring4)) {
						System.out.println(substring5+"  "+simpleDateFormate.format(date));
					}
				} else {
					
					System.out.println(i+"  "+simpleDateFormate.format(date));
				}

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

Test02Writer

import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

    public class Test02Writer implements Runnable{
	private PrintWriter printWriter;
	private String name;
	private Map<String, String> mapNameMessage = new HashMap<>();
	public Test02Writer(String name ,PrintWriter printWriter) {
		this.printWriter = printWriter;
		this.name = name;
		
	}
	@Override
	public void run() {
      
			Scanner scanner = new Scanner(System.in);						
			while(true) {								
				String next = scanner.next();
				mapNameMessage.put(name, next);
				printWriter.print("**");
				printWriter.println(mapNameMessage);
                printWriter.flush();								
			}						
		}
	}

连接数据库

在这里插入图片描述

user_name是姓名

user_code是密码

user_account是账号

先启动Service,再启动Login

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值