📄 chatserver.java
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;
public class ChatServer implements ActionListener{
public static int port = 6666;//服务端的侦听口
ServerSocket serversocket;//服务端Socket
JFrame frame;
JMenuBar menubar;//建立菜单栏
JMenu servicemenu;//建立菜单组
//建立菜单项
JMenuItem portitem;//端口设置
JMenuItem startitem;//启动服务
JMenuItem stopitem;//停止服务
JMenuItem exititem;//退出
JMenu helpmenu;
JMenuItem helpitem;//帮助
JLabel label;
JPanel panel;
JScrollPane userscrollpane;//窗口滚动条
JScrollPane messagescrollpane;//窗口滚动条
JTextArea usershow;//用户列表窗口
JTextArea messageshow;//消息窗口
Dimension framesize;//窗口的尺寸
Dimension screensize;//屏幕的尺寸
UserLinkList userlinklist;//用户链表
ServerListen serverlisten;//端口侦听
public ChatServer(){
frame = new JFrame("服务器");
Container contentpane=frame.getContentPane();
frame.setLayout(new BorderLayout(5,10));
menubar = new JMenuBar();
frame.setJMenuBar(menubar);
servicemenu = new JMenu("服务器");
menubar.add(servicemenu);
portitem = new JMenuItem("端口设置");
startitem = new JMenuItem("启动服务");
stopitem = new JMenuItem("停止服务");
exititem = new JMenuItem("退出");
servicemenu.add(portitem);
servicemenu.add(startitem);
servicemenu.add(stopitem);
servicemenu.add(exititem);
stopitem.setEnabled(false);//初始时,令停止服务按钮不可用
//为菜单栏添加事件监听
portitem.addActionListener(this);
startitem.addActionListener(this);
stopitem.addActionListener(this);
exititem.addActionListener(this);
helpmenu = new JMenu("帮助");
menubar.add(helpmenu);
helpitem = new JMenuItem("帮助");
helpmenu.add(helpitem);
helpitem.addActionListener(this);
label=new JLabel("在线人数 聊天内容");
contentpane.add(label,BorderLayout.NORTH);
usershow = new JTextArea(20,10);//用户列表窗口
usershow.setEnabled(false);
userscrollpane = new JScrollPane//添加滚动条
(usershow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
contentpane.add(userscrollpane,BorderLayout.WEST);
messageshow = new JTextArea(20,50);//消息窗口
messageshow.setEnabled(false);
messagescrollpane = new JScrollPane//添加滚动条
(messageshow,JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED,
JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
contentpane.add(messagescrollpane,BorderLayout.CENTER);
frame.pack();
//设置运行时窗口的位置
framesize = frame.getSize();
screensize = Toolkit.getDefaultToolkit().getScreenSize();
int x = (int)(screensize.width - framesize.getWidth())/2;
int y = (int)(screensize.height - framesize.getHeight())/2;
frame.setLocation(x,y);
frame.setResizable(false);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e){
stopService();
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e){//事件处理
Object obj = e.getSource();
if(obj == portitem) new SetPort(frame);//设置端口
else if(obj == startitem) startService();//启动服务
else if(obj == stopitem){//停止服务
int i = JOptionPane.showConfirmDialog
(frame,"真的停止服务吗?","停止服务",
JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if(i == JOptionPane.YES_OPTION) stopService();
}
else if(obj == exititem){//退出
int j = JOptionPane.showConfirmDialog
(frame,"真的要退出吗?","退出",
JOptionPane.YES_OPTION,JOptionPane.QUESTION_MESSAGE);
if(j == JOptionPane.YES_OPTION){
stopService();
System.exit(0);
}
}
else if(obj == helpitem) Help();
}
public void startService(){//启动服务
try{
serversocket = new ServerSocket(port,30);
messageshow.append("服务器已经启动" + " " + "端口:" + port + '\n');
portitem.setEnabled(false);
startitem.setEnabled(false);
stopitem.setEnabled(true);
userlinklist = new UserLinkList();
serverlisten = new ServerListen(serversocket,usershow,messageshow,userlinklist);
serverlisten.start();
}
catch (Exception e){
//System.out.println(e);
}
}
public void stopService(){//停止服务
try{
sendStopToAll();//发送停止服务给所有用户
int count = userlinklist.getCount();
int i = 0;
while(i < count){
Node node = userlinklist.findUser(i);
node.input.close();
node.output.close();
node.socket.close();
i++;
}
serversocket.close();
portitem.setEnabled(true);
startitem.setEnabled(true);
stopitem.setEnabled(false);
messageshow.append("服务端已经关闭\n");
usershow.setText("");
}
catch(Exception e){
//System.out.println(e);
}
}
public void sendStopToAll(){//发送停止服务给所有用户
int count = userlinklist.getCount();
int i = 0;
while(i < count){
Node node = userlinklist.findUser(i);
if(node == null){
i++;
continue;
}
try{
node.output.writeObject("服务关闭");
node.output.flush();
}
catch(Exception e){
//System.out.println(e);
}
i++;
}
}
public void Help(){
}
public static void main(String args[]){
new ChatServer();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -