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

📄 serverthread.java

📁 ICQ聊天程序
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
import java.util.*;
class ServerThread extends Thread               //服务器主线程
{
   int          sPort0,sPort1;                  //服务器接口
   ServerSocket sSocket0,sSocket1;              //服务器插座
   ServerFrame  frame;
   BroadCastInstant BCI;
   TextArea     sStatus;

   Vector       Clients;                        //储存联机客户端
   Vector       messages;                       //储存客户端讯息
   Vector       messages1; 						//在线人员
   Vector		ptpmessage;
   BroadCast        BroadCastWriter;            //广播讯息线程
   CleanDeadConnect Cleaner;                    //清除中断联机线程
   UDPServer udpServer;

   public ServerThread(ServerFrame f)
   {
      Clients  = new Vector();                  //建立Vector实体 
      messages = new Vector();					//建立Vector实体
      messages1 = new Vector();					//建立Vector实体
      ptpmessage = new Vector();					//建立Vector实体
    //  messages1.addElement("0");
	  messages1.addElement("end");				//作为消息的结束
      try
      {
         sPort0   = 8000;sPort1= 8001;            //指定接口
         sSocket0 = new ServerSocket(sPort0);     //建立服务器插座  
         sSocket1 = new ServerSocket(sPort1);
      }
      catch(IOException E)                       //建立失败的话...
      {
         System.out.println("发生异常: " + E);
         System.out.println("无法建立服务器插座!!");
         System.exit(1);                        //结束程序
      }

      this.frame = f;
      sStatus    = frame.ServerStatus;
 
      sStatus.append("==============================================ICQ服务器已启动======================================\n\n");
      sStatus.append("==================================================等待联机=========================================\n\n");

      BroadCastWriter = new BroadCast(this);    //建立广播线程
      BroadCastWriter.start();                  //启动

      Cleaner = new CleanDeadConnect(this);     //建立清除中断联机线程
      Cleaner.start();                          //启动 
      
      udpServer=new UDPServer();
      udpServer.run();
//      try {
//            udpServer.run();
//        } catch (IOException e) {
//             System.out.println ("IOException occurred with socket.");
//             System.out.println (e);
//             System.exit(1);
//         }
//         if(udpServer.getReceiveMsg()!=null)
//         ptpmessage.addElement(udpServer.getReceiveMsg() );
         
         
   }
 
   public void run()
   {
      while(true)                               //等待建立联机的循环
      {
         try
         {
         
            Socket cSocket0       = sSocket0.accept();   //等待联机
            Socket cSocket1       = sSocket1.accept();
                    
            //若联机成功则建立可用来和客户端沟通的线程
            ClientThread cThread = new ClientThread(cSocket0,cSocket1,this);
            cThread.start();                           //启动线程

            //在服务器窗口中加入联机讯息
            sStatus.append(cThread.getClientName() + ":");
            sStatus.append(cThread.getClientAddress() + "已联机 ");
            sStatus.append("目前联机数: " + ClientThread.ConnectNumber +
                           "\n");
			synchronized(Clients)                      //同步处理
            {
               Clients.addElement(cThread);            //加入Vector
            }
           // messages1.setElementAt(ClientThread.ConnectNumber, 1);//修改第一个值(人数)
         	BCI=new BroadCastInstant(this);
            
         }
         catch(IOException E)                          //发生异常的话
         {
            System.out.println("发生异常: " + E);
            System.out.println("建立客户端联机失败!");
            System.exit(2);                            //离开程序
         }
      }
   }

   public void finalize()
   {
      try
      {
         sSocket0.close();            //关闭服务器程序联机
         sSocket1.close();
      }
      catch(IOException E){}
     
      sSocket0 = null;                //释放资源
      sSocket1 = null;  
   }
}

⌨️ 快捷键说明

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