📄 server.java
字号:
package liaotian;import java.util.*;import java.sql.*;import java.io.*;import java.net.*;class getclien extends Thread{ private Socket socket; private DataInputStream in; private DataOutputStream out; private ThreadGroup comgroup; private String usernumber = null; private String password = null; private String username = null; public int flagdestroy = 0; public getclien(Socket socket,ThreadGroup comgroup) throws IOException { super(comgroup,"thgroup"); this.comgroup = comgroup; this.socket = socket; in = new DataInputStream(socket.getInputStream()); out = new DataOutputStream(socket.getOutputStream()); start(); } public void run(){ String sql; String sqls; try{ while (true) { String str = in.readUTF(); System.out.println(username); //注册用户 if(str.equals("@reg")){ username = in.readUTF(); String usersex=in.readUTF(); password = in.readUTF(); try{ Random n=new Random(); int number=n.nextInt(100000); out.writeInt(number); //String sql; Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库 Connection con=DriverManager.getConnection("jdbc:odbc:xsgl","",""); Statement stmt = con.createStatement(); sql="insert into userstable(Icqno,Nickname,Password,Sex)"; sql=sql+"values('"+number+"','"+username+"','"+password+"','"+usersex+"')"; try{ stmt.executeUpdate(sql); }catch(Exception x){x.printStackTrace();} }catch (Exception x){x.printStackTrace();} } //登录 if(str.equals("@logon")){ usernumber = in.readUTF(); password = in.readUTF(); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库 Connection c=DriverManager.getConnection("jdbc:odbc:xsgl"," "," "); Statement stmt = c.createStatement(); ResultSet rs = stmt.executeQuery("SELECT icqno,password,Nickname FROM userstable"); //ResultSet onlineuser=stmt.executeQuery("select icqno,Nickname FROM userstable where status='1'"); while(rs.next()){ String icqnumber=rs.getString("icqno").trim(); String passwd=rs.getString("password").trim(); username=rs.getString("Nickname").trim(); if(usernumber.equals(icqnumber) && password.equals(passwd)) { String ipno=in.readUTF(); System.out.println(ipno); sqls="update userstable set IP='"+ipno+"',status='1' where Icqno LIKE '"+icqnumber+"'" ; stmt.executeUpdate(sqls); out.writeUTF("OK"); //ResultSet onlineuser=stmt.executeQuery("select icqno,Nickname FROM userstable where status='1'"); getclien[] list = new getclien[comgroup.activeCount()]; //告诉所有已在线用户新用户登陆 System.out.print(list.length); comgroup.enumerate(list,false); //System.out.println(username); for(int i = 0; i < list.length; i ++){ ResultSet onlineuser=stmt.executeQuery("select icqno,Nickname FROM userstable where status=1"); DataOutputStream otout = new DataOutputStream(list[i].socket.getOutputStream()); otout.writeUTF("message"); otout.writeUTF(username+ ": 进入聊天室"); otout.writeUTF("listrefresh"); //otout.writeInt(no); while(onlineuser.next()){ otout.writeUTF(onlineuser.getString("icqno").trim()+" "+onlineuser.getString("Nickname").trim()); } otout.writeUTF("END"); } } } out.writeUTF("failed"); }catch (Exception ee){ee.printStackTrace();} } //离开 if(str.equals("@leave")){ try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");//连接数据库 Connection c=DriverManager.getConnection("jdbc:odbc:xsgl"," "," "); Statement stmt = c.createStatement(); sqls="update userstable set status='0' where Icqno LIKE '"+usernumber+"'" ; stmt.executeUpdate(sqls); System.out.println("ICQ DE HAO MA"+usernumber); getclien[] list = new getclien[comgroup.activeCount()]; System.out.print(list.length); comgroup.enumerate(list,false); for(int i = 0; i < list.length; i ++){ ResultSet onlineuser=stmt.executeQuery("select Nickname,icqno FROM userstable where status=1"); DataOutputStream otout = new DataOutputStream(list[i].socket.getOutputStream()); otout.writeUTF("message"); otout.writeUTF(username + ": 离开聊天室"); otout.writeUTF("listrefresh"); while(onlineuser.next()){ otout.writeUTF(onlineuser.getString("Nickname").trim()+" "+onlineuser.getString("icqno").trim()); } otout.writeUTF("END"); } socket.close(); flagdestroy = 1; break; }catch(Exception ee){} } if(str.equals("@publicmessage")){ String strs=in.readUTF(); getclien[] list = new getclien[comgroup.activeCount()]; System.out.print(list.length); comgroup.enumerate(list,false); for(int i = 0; i < list.length; i ++){ DataOutputStream otout = new DataOutputStream(list[i].socket.getOutputStream()); otout.writeUTF("message"); otout.writeUTF(username+":"+strs); } //break; } if(str.equals("@selfmessage")){ String selfuserinfo = in.readUTF(); String selfmsg = in.readUTF(); System.out.println("34df"+selfuserinfo); int blankindex = selfuserinfo.indexOf(" "); System.out.println("blanknumber"+blankindex); String b = "1234567890"; String a = b.substring(5); System.out.println("atest " +a); String selfnumber = selfuserinfo.substring(0,blankindex); String selfname = selfuserinfo.substring(blankindex + 2); System.out.println("number "+ selfname); getclien[] list = new getclien[comgroup.activeCount()]; System.out.print(list.length); comgroup.enumerate(list,false); int i = 0; for(i = 0; i < list.length; i ++ ){ if(list[i].usernumber.equals(selfnumber)){ System.out.println("list length"+ list.length); System.out.println("inner number"+ i); out.writeUTF("message"); out.writeUTF("我对 " + selfname + "悄悄说 " + selfmsg); //DataOutputStream otout = new DataOutputStream(list[i].socket.getOutputStream()); //otout.writeUTF("message"); list[i].out.writeUTF("message"); //otout.writeUTF(username+":"+in.readUTF()); list[i].out.writeUTF(username + " 对我悄悄说 " + selfmsg); break; } } System.out.println("error i:" + i); if(i >= list.length){ } } } }catch(IOException e) { System.out.println("Datatransfer error"); } try{ in.close(); //socket.close(); }catch(IOException e) { } }}public class Server { static final int PORT = 6000; static ThreadGroup comgroup = new ThreadGroup("thgroup"); /** * @param args */ public static void main(String[] args) throws IOException { ServerSocket s = new ServerSocket(PORT); ThreadGroup comgroup = new ThreadGroup("thgroup"); System.out.println("Server Started"); try { while(true) { Socket socket = s.accept(); try { getclien aclien = new getclien(socket,comgroup); if(aclien.flagdestroy == 1){ aclien.interrupt(); // System.out.println("active count::::::::"+comgroup.activeCount()); // aclien. aclien = null; } } catch(IOException e) { socket.close(); } } } finally { s.close(); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -