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

📄 serverthread.java~150~

📁 1. 消息即时通信 2. 消息发送实现一对一、一对多等多种发送模式 3. 发送的消息实现多彩文本编辑
💻 JAVA~150~
字号:

import java.io.*;
import java.util.*;
import java.net.*;
public class ServerThread extends Thread{
  String _name;
  String _key;
  int counter;
  DataOutputStream dos=null;
  DataInputStream dis=null;
  Socket socket=null;
  Hashtable peopleList=null;
  ChatUserDB chatUserDB=new ChatUserDB();
  public ServerThread(Socket socket,Hashtable peopleList){
    this.socket=socket;
    this.peopleList=peopleList;
    try{
      dos=new DataOutputStream(socket.getOutputStream());
      dis=new DataInputStream(socket.getInputStream());
    }catch(IOException e){
      e.printStackTrace();
    }
  }
  public void run(){
    String s="LOGIN_SUCCEED:";



    /*while(true){
      try{
      for(int i=0;i<=20;i++){
        dos.writeUTF("LOGIN_SUCCEED:");
        //dos.writeUTF("LOGIN_PEOPLE:");
       dos.writeUTF("LOGIN_PEOPLE:USER2");
       //dos.writeInt(100);
       dos.flush();
        //dos.writeInt(100);
        System.out.println(s);
       Thread.sleep(1000);
      }
      }catch(Exception e){
        try{
          dos.flush();
          dos.close();
          dis.close();
        }catch(Exception e1){

        }
        System.out.println("用户离开");
        try{
          socket.close();
        }catch(Exception  e1){

        }
        //e.printStackTrace();
      }


    }*/
    while(true){
      String _message = null;
      try {
        _message = dis.readUTF();
        if(_message.startsWith("LOGIN_NAME:")){
          //调用数据库函数,确认用户
          //存线程
          _name=_message.substring(_message.indexOf(":")+1,_message.indexOf("LOGIN_PD:"));
          _key=_message.substring(_message.indexOf("LOGIN_PD:")+9);

          if(chatUserDB.checkUser(_name,_key)){
            peopleList.put(_name,this);
            dos.writeUTF("LOGIN_SUCCEED:");
            dos.writeUTF("LOGIN_PEOPLE:大家");
            Enumeration _enum=peopleList.elements();
           // while(true){
            //  dos.writeUTF("LOGIN_PEOPLE:WOMENDEGUSHI");
           // }
           while(_enum.hasMoreElements()){//发送名字
           //while(true){
              //System.out.println(((ServerThread)_enum.nextElement()).socket.getPort());
              ServerThread serverThread=(ServerThread)_enum.nextElement();
              serverThread.dos.writeUTF("LOGIN_PEOPLE:"+_name);


              if(serverThread!=this){

                dos.writeUTF("LOGIN_PEOPLE:"+serverThread._name);
              }
            }
            dos.flush();
          }else{
            //System.out.println("eeee");
            dos.writeUTF("LOGIN_ERROR");
          }

        }
        else if(_message.startsWith("PRIVATE_MESSAGE:")){
          String _toPeoples=_message.substring(_message.indexOf("#TOPEOPLE#")+10);
          String _content=_message.substring(_message.indexOf("#MESSAGECONTENT#")+16,
                                             _message.indexOf("#TOPEOPLE#"));
          StringTokenizer fenxi=new StringTokenizer(_toPeoples,"$");
          counter=fenxi.countTokens();
          for(int i=0;i<counter;i++){
            String _toPeople=fenxi.nextToken();
            ServerThread serverThread=(ServerThread)peopleList.get(_toPeople);
            if(serverThread!=null){
              serverThread.dos.writeUTF("PRIVATE_MESSAGE:"+_name+"悄悄对您说:"+_content);

            }else{
              serverThread.dos.writeUTF("PEOPLE_LEAVE:"+_toPeople+"已经离开");
            }
          }
        }

        else if(_message.startsWith("PUBLIC_MESSAGE:")){
          //转发消息
          String _content=_message.substring(_message.indexOf("#MESSAGECONTENT#")+16);
          Enumeration enum=peopleList.elements();
          while(enum.hasMoreElements()){
            ServerThread serverThread=(ServerThread)enum.nextElement();
            if(serverThread!=this){
              serverThread.dos.writeUTF("PUBLIC_MESSAGE:"+ _name + "对大家说:" + _content);
            }
          }


        }
        else if(_message.startsWith("SEND_FILE:")){
          String _toPeople=_message.substring(_message.indexOf("#TOPEOPLE#")+10,_message.indexOf("#PORT#"));
          String _toSendFile=_message.substring(_message.indexOf("SEND_FILE:")+10,_message.indexOf("#TOPEOPLE#"));
          String _port=_message.substring(_message.indexOf("#PORT#")+6,_message.indexOf("#FILE_LENGTH#"));
          String fileLength=_message.substring(_message.indexOf("#FILE_LENGTH#")+13);
          ServerThread serverThread=(ServerThread)peopleList.get(_toPeople);

          InetAddress ipAddress=this.socket.getInetAddress();

            if(serverThread!=null){
              serverThread.dos.writeUTF("SEND_FILE:"+_name+"#TOSENDFILE#"+_toSendFile+"#IPADDRESS#"+ipAddress+"#PORT#"+_port+"#FILE_LENGTH#"+fileLength);
             // System.out.println("SEND_FILE:"+_name+"#TOSENDFILE#"+_toSendFile+"#IPADDRESS#"+ipAddress+"#PORT#"+_port+"#FILE_LENGTH#"+fileLength);
            }else{
              serverThread.dos.writeUTF("PEOPLE_LEAVE:"+_toPeople+"已经离开");
            }
          //File f=new File(_toSendFile);
          //System.out.println(_toPeople+" "+f.getName()+" "+_port);
        }
        else if(_message.startsWith("CANCEL_SENDING:")){
          String _fromPeople=_message.substring(_message.indexOf("CANCEL_SENDING:")+15,_message.indexOf("#TOPEOPLE#"));
          String _content=_message.substring(_message.indexOf("#TOPEOPLE#")+10);
          ServerThread serverThread=(ServerThread)peopleList.get(_fromPeople);
          if(serverThread!=null){
            serverThread.dos.writeUTF("CANCEL_SENDING:"+_content);
          }



        }
        else if(_message.startsWith("AGREE_ACCEPT:")){

        }
        else if(_message.startsWith("DISAGREE_ACCEPT:")){

        }
        else if(_message.startsWith("PEOPLE_LEAVE:")){

        }
      }
      catch (IOException ioe) {
        Enumeration enum=peopleList.elements();
        while(enum.hasMoreElements()){
          try{
            ServerThread serverThread=(ServerThread)enum.nextElement();
            if(serverThread!=this&&serverThread.isAlive()){
              serverThread.dos.writeUTF("PEOPLE_LEAVE:"+this._name);
            }
          }catch(Exception e){

          }
        }
        try{
          if (peopleList.containsKey(_name)) {
            peopleList.remove(_name);
          }
        }catch(Exception e){

        }
        //System.out.println();
        //ioe.printStackTrace();
        try{
          this.socket.close();
          this.dos.flush();
          this.dos.close();
          this.dis.close();
          break;
        }catch(Exception  e){
          System.out.println("serverthread");
          e.printStackTrace();
        }


      }
    }

  }









 /* public static void main(String[] args) {
  }*/
}










⌨️ 快捷键说明

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