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

📄 serverframe.java

📁 java游戏设计
💻 JAVA
字号:
// 程序:多人联机服务器
// 范例文件:ServerFrame.java

import java.io.*;
import java.awt.*;
import java.net.*;
import java.util.*;                             //为了建立Vector实体
import java.awt.event.*;

public class ServerFrame extends Frame implements ActionListener
{
   int      ScreenWidth,ScreenHeight; 
   Button   CloseServer;
   TextArea ServerStatus;
   
   ServerThread sThread;

   public ServerFrame()                         //创建方法
   {
      super("游戏服务器");                      //建立服务器窗口
      
      ServerStatus = new TextArea();            //建立TextArea
      CloseServer  = new Button("关闭服务器");  //建立Button
      ServerStatus.setEditable(false);          //TextArea为不可编辑
      CloseServer.addActionListener(this);      //注册按钮的事件处理方法

      add(ServerStatus,BorderLayout.CENTER);    //加入TextArea
      add(CloseServer,BorderLayout.SOUTH);      //加入Button

      //将窗口置于屏幕中央,宽度与高度皆为屏幕一半
      ScreenWidth  = getToolkit().getScreenSize().width;
      ScreenHeight = getToolkit().getScreenSize().height;
      setSize(ScreenWidth / 2,ScreenHeight / 2);
      setLocation((ScreenWidth - getWidth()) / 2,
                  (ScreenHeight - getHeight()) / 2);
      
      setResizable(false);                      //不可改变窗口大小
      setVisible(true);                         //显示窗口

      sThread      = new ServerThread(this);    //建立服务器主线程
      sThread.start();                          //启动线程
   }

   public static void main(String srgs[])
   {
      new ServerFrame();                        //建立游戏服务器窗口
   }

   //=====实现ActionListener界面=====================================
   public void actionPerformed(ActionEvent e)   //当按钮按下时
   {
      dispose();
      System.exit(0);                           //关闭窗口
   }
}

class ServerThread extends Thread               //服务器主线程
{
   int          sPort;                          //服务器接口
   ServerSocket sSocket;                        //服务器插座
   ServerFrame  frame;

   TextArea     sStatus;

   Vector       Clients;                        //储存联机客户端
   Vector       messages;                       //储存客户端讯息
   BroadCast        BroadCastWriter;            //广播讯息线程
   CleanDeadConnect Cleaner;                    //清除中断联机线程

   public ServerThread(ServerFrame f)
   {
      Clients  = new Vector();                  //建立Vector实体 
      messages = new Vector();

      try
      {
         sPort   = 6633;                        //指定接口
         sSocket = new ServerSocket(sPort);     //建立服务器插座  
      }
      catch(IOException E)                      //建立失败的话...
      {
         System.out.println("发生异常: " + E);
         System.out.println("无法建立服务器插座!!");
         System.exit(1);                        //结束程序
      }

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

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

      Cleaner = new CleanDeadConnect(this);     //建立清除中断联机线程
      Cleaner.start();                          //启动 
   }
 
   public void run()
   {
      while(true)                               //等待建立联机的循环
      {
         try
         {
            Socket cSocket       = sSocket.accept();   //等待联机

            //若联机成功则建立可用来和客户端沟通的线程
            ClientThread cThread = new ClientThread(cSocket,this);
            cThread.start();                           //启动线程

            //在服务器窗口中加入联机讯息
            sStatus.append(cThread.getClientName() + ":");
            sStatus.append(cThread.getClientAddress() + "已联机 ");
            sStatus.append("目前联机数: " + ClientThread.ConnectNumber +
                           "\n");

            synchronized(Clients)                      //同步处理
            {
               Clients.addElement(cThread);            //加入Vector
            }
         }
         catch(IOException E)                          //发生异常的话
         {
            System.out.println("发生异常: " + E);
            System.out.println("建立客户端联机失败!");
            System.exit(2);                            //离开程序
         }
      }
   }

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

⌨️ 快捷键说明

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