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

📄 server.java

📁 一个采用Java Socket编程实现的QQ软件
💻 JAVA
字号:
package serverwork;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import java.util.Map;
import java.util.Vector;
import database.userservice;

public class Server implements Runnable{
    private ServerSocket sersocket;
    private int port=8000;                                 //服务器在8000端口等待
    public ServerUserManager sum;
    public ServerThread ser;
    public serverGUI servergui;
    public  userservice dataservice;
    private Vector onlinevector;
    private Vector downlinevector;
    public  Vector group11;
    public  Vector group22;
    private Map<String,String> onlineUser = null;
    private Map<String,String> downlineUser = null;
    private Map<String,String> group1 = null;
    private Map<String,String> group2 = null;
    public Server(){
    	onlineUser = new HashMap<String,String>();          //用户存放在线用户用户名和当前的用户对象对应
    	downlineUser = new HashMap<String,String>();        //存入下线用户的用户名
        group1 = new HashMap<String,String>();
        group2 = new HashMap<String,String>();
        onlinevector = new Vector();
    	downlinevector = new Vector();
        group11 = new Vector();
        group22 = new Vector();
        dataservice = new userservice();
        Initdatabase();                                    //服务器开启时读取数据库中的数据
        servergui = new serverGUI(this);                  //产生服务器端的图形界面
        try {
            sersocket = new ServerSocket(port);   //建立登陆的socket
        } catch (IOException e) {
            e.printStackTrace();
        }
        sum = new ServerUserManager(this);            //建立server的用户管理对象
        new Thread(this).start();  //                  //开启自身的等待线程
        sum.start();                                         //开始服务器的管理线程
    }
    
    public void run() {
        boolean done = false;
        while(!done){
            try{
                System.out.println("等待用户登入");               
                Socket clientSock = sersocket.accept();            //等待用户的登陆到系统中来
                System.out.println("有用户登入");
                ser = new ServerThread(clientSock, this);        //开启一个处理当前用户业务的线程
                ser.start();
            } catch(IOException ex){
                try {                                             //等待用户登录失败
                    sersocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                done = true;
            }
        }       
    }
    public static void main(String args[]) {
        
        new Server();
        System.out.println("服务器已开启");
    }
    private void Initdatabase(){                                  //将数据库中的成员恢复到服务器中的方法实现
        String[] downlineuse = dataservice.getalluser();
        for(int i = 0; i < downlineuse.length; i++){
            System.out.println("服务器初始化:"+downlineuse[i]);
            downlineUser.put(downlineuse[i],"");
            downlinevector.add(downlineuse[i]);
            String[] groups = dataservice.getallgroups(downlineuse[i]);
            if(!groups.equals("")){
                for(int j = 0; j < groups.length; j++){
                    if(groups[j].equals("1111")){
                        group1.put(downlineuse[i],"1");
                        group11.add(downlineuse[i]);
                    }else if(groups[j].equals("2222")){
                        group2.put(downlineuse[i],"1");
                        group22.add(downlineuse[i]);
                    }
                }
            }
        }
    }
    
    public void addonlineuser(String username,String address){        //添加上线用户
        onlineUser.put(username, address);
        onlinevector.add(username);
        downlineUser.remove(username);
        downlinevector.remove(username);    
    }
    
    public void adddownlineuser(String username){                     //处理下线用户
        downlineUser.put(username,"");
        downlinevector.add(username);
        onlineUser.remove(username);
        onlinevector.remove(username);
    }    
         
    public Map<String,String> getonlineuser(){                        //获得系统当前的在线用户
        return onlineUser;
    }
    public Map<String,String>getgroup1(){
        return group1;
    }
    public Map<String,String>getgroup2(){
        return group2;
    }
    public Map<String,String> getdownlinuser(){                       //获取系统当前的不在线用户
        return downlineUser;
    }  
    public Vector getvectoronline(){
        return onlinevector;     }
     public Vector getvectordownline(){
         return downlinevector;
     }
}




⌨️ 快捷键说明

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