📄 myservice.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 + -