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

📄 server.java

📁 java编写的聊天室程序
💻 JAVA
字号:
import java.net.*;
import java.io.*;

class Server extends Thread     //接收客户机的线程
{ServerSocket serverSocket1;
 QQer[]qqer=new QQer[50];
 int index=-1;                  //QQer下标
 
   
    Server()throws Exception
    {try
        {serverSocket1=new ServerSocket(8888);     //开启8888端口
        }
      catch(IOException e)
        {System.out.println("服务器建立失败!"+e);
         throw new Exception();
        }
     System.out.println("服务器已正常建立!");
     this.start();
    } 


    
	public void run()
	{while(true)
	     {boolean flg=true;
	      while(index==49)             //控制上限大于50时不接收
	           {if(flg)
	              {System.out.println("聊天室已人满!");
	               try
	                 {Thread.currentThread().sleep(5000);                         
	                 }
	               catch(Exception e)
	                 {System.out.println(e);
	                 }
	               flg=false;
	              }
	           }
	           
	      System.out.println("正在等待客户机连接...");
	      Socket client1=null;
	      try
	        {client1=serverSocket1.accept();
	         
	         InputStream inStream=client1.getInputStream();
	         ObjectInputStream inObject=new ObjectInputStream(inStream);
	         qqer[++index]=(QQer)inObject.readObject();
	         qqer[index].client=client1;
	         	         	         
	         ServerReadAndWrite thread1=new ServerReadAndWrite(client1);             //与客户机对话的线程
	         	         
	        }
	      catch(Exception e)
	        {System.out.println(e);
	        }
	        
	      System.out.println(qqer[index].user+"进入聊天室!");
	      writeToAll(qqer[index].user+"进入聊天室!");
	      
	     }
	}
	
	
	private void listDateToAll()
	{String[]listDate=new String[index+2];   //因为index是下标,加1是数组长度,再加1是字符串数组中多了一个"大家"
	 
	 
	 listDate[0]="大家";
	 for(int i=1;i<index+2;i++)
	    {listDate[i]=qqer[i-1].user;
	    }
	    
	   
	 writeToAll("setListDate");
	 writeToAll(Integer.toString(listDate.length));
	 
	 for(int n=0;n<listDate.length;n++)
	    {writeToAll(listDate[n]);
	    }
	 
	}


    private void deleteQQer(Socket client)
    {int n=49;
     String user;
    
     for(int i=0;i<=index;i++)
        {if(qqer[i].client==client)
           {n=i;
            break;
           }
        }
        
     user=qqer[n].user;
     System.out.println(user+"离开聊天室");   
     
     for(int i=n;i<index;i++)
        {qqer[i]=qqer[i+1];
        }
     index--;
     
     listDateToAll();
     writeToAll(user+"离开聊天室");
     
    }




    private void writeToAll(String str1)          //发给所有用户
    {Socket client1;
     OutputStream outStream1;
     PrintStream  pStream1;
    
    	for(int i=0;i<=index;i++)
           {try
              {client1=qqer[i].client;
               outStream1=client1.getOutputStream();
               pStream1=new PrintStream(outStream1);
               pStream1.println(str1);
              }
            catch(Exception e)
              {System.out.println("writeToAll错误  "+e);
              }
           }
    }




	
class ServerReadAndWrite extends Thread                   //与客户机对话的线程(内部类)
{Socket client1;
 BufferedReader inStream;

 
	ServerReadAndWrite(Socket client)
	{try
	   {client1=client;
	   	InputStream inStr=client1.getInputStream();
	    InputStreamReader inReader=new InputStreamReader(inStr);
	    inStream=new BufferedReader(inReader);
	    
	    listDateToAll();
       }
     catch(Exception e)
       {System.out.println(e);
       }
	 
	 this.start();
	}
	
	public void run()
	{while(true)                        
	      {try
	         {String str1=inStream.readLine();        //读取,再发给所有客户机,包括服务器
	          writeToAll(str1);
	         }
	       catch(IOException e)
	         {deleteQQer(client1);                              //应该减去这个拥护
	          return;
	         }
         
	      }
	}
}
}

⌨️ 快捷键说明

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