📄 serverframe.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 + -