⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myservice.java

📁 聊天系统。1、聊天 2、传文件 3、多人聊天
💻 JAVA
字号:

package com.server;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement ;
import java.util.Enumeration;
import java.util.Hashtable;

/**
 * @author gt.Cloud
 * 
 * TODO 要更改此生成的类型注释的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
 */
public class MyService extends Thread {
	private Socket s;

	private Hashtable ht;

	public void setSocket(Socket s) {
		this.s = s;
	}

	public void setHashtable(Hashtable ht) {
		this.ht = ht;
	}

	public void run() {
		try {
			//(3)
			//接收用户名&密码
			InputStream is = s.getInputStream();
			InputStreamReader isr = new InputStreamReader(is);
			BufferedReader br = new BufferedReader(isr);

			String upa = br.readLine();

			//(4)
			//拆分用户名&密码
			String u = "";
			String p = "";
			String a = "";
			try {
				u = upa.split("%")[0];
				p = upa.split("%")[1];
				a = upa.split("%")[2];
			} catch (Exception ee) {
			}

			//(5)
			//到数据库中验证
			
			
			Connection cn = DataBase.getConnection() ;
			System.out.println (cn) ;
			PreparedStatement ps = cn
				.prepareStatement("select * from info where username=? and pass=? and author=?");
			ps.setString(1, u);
			ps.setString(2, p);
			ps.setString(3, a);

			ResultSet rs = ps.executeQuery();

			//(7)
			//发送信息回客户端
			OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());
			PrintWriter pw = new PrintWriter(osw, true);

			if (rs.next()) {
				pw.println("OK");
				//(17)
				//将所有Hashtable中也有的用户名发送给自己
				Enumeration em = ht.keys();
				while (em.hasMoreElements()) {
					String tu = (String) em.nextElement();

					pw.println("user%" + tu);
				}

				//(18)
				//向所有Hashtable中已有的用户发送自己的名字
				em = ht.elements();
				while (em.hasMoreElements()) {
					Socket ts = (Socket) em.nextElement();

					OutputStreamWriter tosw = new OutputStreamWriter(ts
							.getOutputStream());
					PrintWriter tpw = new PrintWriter(tosw, true);

					tpw.println("user%" + u);
				}

				//(15)
				//将用户名&Socket存入Hashtable
				ht.put(u, s);

				//(11)
				//等待接收客户端发来的聊天信息
				while (true) {
					String message = br.readLine();
					
					if(message.equals("{exit}")){
						ht.remove(u) ;
						
						em = ht.elements() ;
						while(em.hasMoreElements()){
							Socket ts = (Socket)em.nextElement() ;
							
							PrintWriter tpw = new PrintWriter(new OutputStreamWriter(ts.getOutputStream()) , true) ;
							
							tpw.println("remove%"+u) ;
						}
					}

					if (message.split("%")[0].equals("file")) {
						//发送文件
						String user = message.split("%")[1];
						String filename = message.split("%")[2];

						Socket ts = (Socket) ht.get(user);
						OutputStream tos = ts.getOutputStream();
						PrintWriter tpw = new PrintWriter(
								new OutputStreamWriter(tos), true);

						tpw.println("file%" + filename );
						byte tmp[] = new byte[4096];

						int ll = 0;
						while (ll != -1) {
							ll = is.read(tmp);
							tos.write(tmp, 0, ll);
						}

					}
					if(message.split("%")[0].equals("add")){
						String user = message.split("%")[1] ;
						String username = message.split("%")[2] ;
						String email = message.split("%")[3] ;
						String author = message.split("%")[4] ;
						Connection a_cn = DataBase.getConnection() ;
						Statement a_st = a_cn.createStatement() ;
						boolean flag = a_st.execute("insert into info values('"+username+"','123','"+email+"','"+author+"')") ;
						Socket a_socket = (Socket)ht.get(user) ;
						PrintWriter a_pw = new PrintWriter(new OutputStreamWriter(a_socket.getOutputStream()),true) ;						
						if(!flag){
							a_pw.println("add_ok") ;
						}else{
							a_pw.println("add_err") ;
						}
					}
					if(message.split("%")[0].equals("note")){
						em = ht.elements() ;
						String user = message.split("%")[1] ;
						Socket socket = (Socket)ht.get(user) ;
						String note = message.split("%")[2] ;
						while(em.hasMoreElements()){							
							Socket ts = (Socket)em.nextElement() ;

								PrintWriter tpw = new PrintWriter(new OutputStreamWriter(ts.getOutputStream()) , true) ;							
								tpw.println("note%"+note) ;
														
						}
					}
					if(message.split("%")[0].equals("modifypass")){
						Connection m_cn = DataBase.getConnection() ;
						Statement m_st = m_cn.createStatement() ;
						int temp = m_st.executeUpdate("update info set pass='"+message.split("%")[2]+"'") ;
						Socket m_socket = (Socket)ht.get(message.split("%")[1]) ;
						PrintWriter m_pw = new PrintWriter(new OutputStreamWriter(m_socket.getOutputStream()),true) ;					
						if(temp == 1){
							m_pw.println("modifypass_ok") ;
						}else{
							m_pw.println("modifypass_err") ;
						}													
					}
					if(message.split("%")[0].equals("modify")){
						Connection m_cn = DataBase.getConnection() ;
						Statement m_st = m_cn.createStatement() ;
						int temp = m_st.executeUpdate("update info set email='"+message.split("%")[3]+"',author='"+message.split("%")[4]+"' where username='"+message.split("%")[2]+"'") ;
						Socket m_socket = (Socket)ht.get(message.split("%")[1]) ;
						PrintWriter m_pw = new PrintWriter(new OutputStreamWriter(m_socket.getOutputStream()),true) ;					
						if(temp == 1){
							m_pw.println("modify_ok") ;
						}else{
							m_pw.println("modify_err") ;
						}
							
					}
					if(message.split("%")[0].equals("remove")){
						Connection r_cn = DataBase.getConnection() ;
						Statement r_st = r_cn.createStatement() ;
						Socket r_socket = (Socket)ht.get(message.split("%")[1]) ;						
						PrintWriter r_pw = new PrintWriter(new OutputStreamWriter(r_socket.getOutputStream()),true) ;
					
						boolean flag = r_st.execute("delete from info where username='"+message.split("%")[2]+"'") ;
						if(!flag)
							r_pw.println("remove_ok") ;
						else	
							r_pw.println("remove_err") ;
					}
					if(message.split("%")[0].equals("find")){
						String user = message.split("%")[1] ;
						String finduser = message.split("%")[2];
						
						Socket ts = (Socket)ht.get(user) ;
						
						Connection findcn = DataBase.getConnection() ;
						Statement findst = findcn.createStatement() ;
						ResultSet findrs = findst.executeQuery("select username , email , author from info where username='"+finduser+"'") ;
						String backmess = "" ;
						OutputStream findos = ts.getOutputStream() ;
						PrintWriter findpw = new PrintWriter(new OutputStreamWriter(findos),true) ;						
						if(findrs.next()){
							backmess =findrs.getString(1)+"#"+findrs.getString(2)+"#"+findrs.getString(3) ;
							findpw.println("find"+"%"+backmess) ;
						}else{
							findpw.println("find_err") ;
						}
					} 
					if (message.split("%")[0].equals("xiaoxi")) {
							//发送信息给所有人
							if(message.split("%")[2].equals("All")){
								em = ht.elements();
								while (em.hasMoreElements()) {
									Socket ts = (Socket) em.nextElement();
	
									PrintWriter tpw = new PrintWriter(
											new OutputStreamWriter(ts
													.getOutputStream()), true );
	
									tpw.println("mess%"+u+"对所有人说:" + message.split("%")[3]);
								}														
							}else{
								//发送信息给某个人
								Socket ts = (Socket) ht.get(message.split("%")[2]);
	
								PrintWriter tpw = new PrintWriter(
										new OutputStreamWriter(ts.getOutputStream()) , true);
	
								tpw.println("mess%" +message.split("%")[1]+"对你说:"+message.split("%")[3]);	
							}							
					}
				}
			}else{
				pw.println("err") ;
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -