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

📄 server.java

📁 聊天程序 网络课程设计的报告 JAVA编写的
💻 JAVA
字号:
//super.ie 2.0聊天软件
//实现了基本通信
//按照协议完成,部分功能在以后的更新中实现
package myprojects.client;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
import java.util.*;
class Server extends JFrame implements ActionListener{
	ServerSocket ssock;
	JButton start=new JButton("start");
	JButton stop=new JButton("stop");
	JLabel num=new JLabel("    ");
	Hashtable clients=new Hashtable(); 
	Accept accept;
	public Server() {
	  this.getContentPane().setLayout(new FlowLayout());
	  this.getContentPane().add(start);
	  this.getContentPane().add(stop);
	  this.getContentPane().add(num);
	  stop.setEnabled(false);
	  start.addActionListener(this);
      stop.addActionListener(this);
      setSize(300, 80);
	  setTitle("Server");
	  this.addWindowListener(new WindowAdapter(){
      	public void windowClosing(WindowEvent e)
      	{ try{
      	   sengMsgToAll("serverquit");
      	   }catch(Exception ee){}
      	   dispose();
      	   System.exit(0);	
      	}
      });	  
      setVisible(true);
    }  
    public void actionPerformed(ActionEvent e)
    { if(e.getSource()==start)  
      {  try{
	       ssock=new ServerSocket(5555);//端口地址
	       stop.setEnabled(true);
	       start.setEnabled(false);
	       accept=new Accept(this); 
	     }catch(Exception ee){}
	  }
	  else
	  {
	    accept.flag=false;    	
	    Enumeration en=clients.elements();
        while(en.hasMoreElements())
        {
          ServerForClient sfClient=(ServerForClient)en.nextElement();   
    	  sfClient.flag=false;
    	}
    	stop.setEnabled(false);
	    start.setEnabled(true);	 	
	    try{
	      ssock.close();
	    }catch(Exception ee){}
	  }      
	}   
    public void sengMsgToAll(String msg)
    {
       Enumeration en=clients.elements();
       while(en.hasMoreElements())
       {
         ServerForClient sfClient=(ServerForClient)en.nextElement();   
    	 try{
    	   sfClient.out.writeUTF(msg);
         }catch(Exception ee){}
       }	
    }   
	public void sengMsgToOne(String msg,String name)
    {
       Enumeration en=clients.elements();
       while(en.hasMoreElements())
       {
         ServerForClient sfClient=(ServerForClient)en.nextElement();   
    	 if(sfClient.getClientName().equals(name))
    	 { try{
    	      sfClient.out.writeUTF(msg);
           }catch(Exception ee){}
           break;
         }
       }	
    }   
	public void refresh()
	{
	  Enumeration en=clients.keys();
	  sengMsgToAll("refresh");
	  while(en.hasMoreElements())
      {  
         sengMsgToAll("name");
         sengMsgToAll((String)en.nextElement());	
	  }	
	}
	public static void main(String args[]) {
		Server mainFrame = new Server();
    }
}
class Accept extends Thread
{ boolean flag=true; 
  Server server;
  Socket sock;
  Accept(Server server)
  {
  	this.server=server;
    this.start(); 	
  }
  public void run()
  {	while(flag)
    { try{
 	    sock=server.ssock.accept();  
	    ServerForClient sfclient=new ServerForClient(server,sock);	    
        String name=sfclient.getClientName();
        boolean f=false;
        Enumeration en=server.clients.keys();
        while(en.hasMoreElements())
        {
          if(((String)en.nextElement()).equals(name))
          {f=true;break;}
        }
        if(f==true)//验证
        {  sfclient.out.writeUTF("equals");
           sock.close();
        }
        else
        {server.clients.put(name,sfclient);
         server.sengMsgToAll("msg");
         server.sengMsgToAll(name+"进入聊天室");
         server.refresh();
         sfclient.start();  
        }
      }catch(Exception ee){}
    }
  }	
}
class ServerForClient extends Thread
{  DataInputStream in;
   DataOutputStream out;
   Socket sock;
   Server server;
   private String name;
   boolean flag=true;
   ServerForClient(Server server,Socket sock)
   {  
      this.server=server;
   	  this.sock=sock;
      try{
        in=new DataInputStream(sock.getInputStream());
        out=new DataOutputStream(sock.getOutputStream());
        name=in.readUTF();
      }catch(Exception e){}
   }
   public String getClientName()
   {return name;}
   public void pwd() //密码
   {
   	}
   public void time() //系统时间
   {}
   public void fun() //设置功能位
   {}
   public void Jie()//结束位
   {}
   public void Xuhao()   //序号
   {}
   public void con() //连接功能
   {}
   public void pic() //图元
   {}
   public void intu() //插入图元
   {}
   
   public void run() 
   { String type=null;
     String msg=null;
     String target=null;
   	 while(flag)
   	 {  try{
   	 	
   	       type=in.readUTF();
           if(type.equals("public"))//群聊
           {
           	  msg=in.readUTF();
              server.sengMsgToAll("msg");
           	  server.sengMsgToAll(name+"对大家说:"+msg);   
           }
           else if(type.equals("private"))
           {
           	  msg=in.readUTF();
           	  target=in.readUTF();
           	  server.sengMsgToOne("msg",target);
              server.sengMsgToOne(name+"对"+target+"说:"+msg,target);   
           }
           else if(type.equals("privateAll"))//私聊
           {
           	  msg=in.readUTF();
           	  target=in.readUTF();
           	  server.sengMsgToAll("msg");
              server.sengMsgToAll(name+"对"+target+"说:"+msg);   
           }
           else if(type.equals("say"))
           {
           	  msg=in.readUTF();
           	  target=in.readUTF();  
           	  server.sengMsgToAll("msg");
              server.sengMsgToAll(name+"对"+target+"说:"+msg);   
           }
           else if(type.equals("quit"))//退出
           {  
              server.clients.remove(name);
           	  server.sengMsgToAll("msg");
           	  server.sengMsgToAll(name+"已离开聊天系统");     	
              flag=false;
              server.refresh();
           }
        }catch(Exception ee){break;}
     }
     try{
       sock.close();
     }catch(Exception ee){}
   }
}

⌨️ 快捷键说明

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