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

📄 chatserver.java

📁 企业内部管理系统
💻 JAVA
字号:
package viewtuba1;

import java.awt.ComponentOrientation;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JToolBar;
import javax.swing.KeyStroke;

import control.ServerListen;
import control.ServerReceive;
import control.UserLinkList;

import model.Node;

import java.net.*;
import java.io.*;

public class ChatServer extends JFrame {

	private JTextField textField;

	private JComboBox comboBox;

	private JTextArea textArea;

	ServerSocket serverSocket;

	public static int port = 8888;

	final JButton portSet;

	final JButton startServer;

	UserLinkList userLinkList;

	final JButton stopServer;

	final JButton sysMessageButton;

	ServerListen listenThread;

	JMenuItem portItem;

	Node node;

	JMenuItem startItem;

	JMenuItem stopItem;

	JMenuItem exitItem;

	JLabel showStatus_1;

	/**
	 * Launch the application
	 * 
	 * @param args
	 */
	public static void main(String args[]) {
		try {
			ChatServer frame = new ChatServer();
			frame.setVisible(true);
			frame.setTitle("聊天室服务端");
			frame.setResizable(false);
			frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * Create the frame
	 */
	public ChatServer() {
		super();
		getContentPane().setLayout(null);
		setBounds(100, 100, 418, 520);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		final JMenuBar menuBar = new JMenuBar();
		final JMenu menu = new JMenu("服务(V)");
		menu.setMnemonic('V');
		portItem = new JMenuItem("端口设置(P)");
		portItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,
				InputEvent.CTRL_MASK));
		portItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				new PortConf().main(null);
			}

		});
		startItem = new JMenuItem("启动服务(S)");
		startItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,
				InputEvent.CTRL_MASK));
		startItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				startService();
			}

		});
		stopItem = new JMenuItem("停止服务(T)");
		stopItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,
				InputEvent.CTRL_MASK));
		stopItem.setEnabled(false);
		stopItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				int i = JOptionPane.showConfirmDialog(null, "really stop?",
						"stop service", JOptionPane.YES_OPTION,
						JOptionPane.QUESTION_MESSAGE);
				if (i == JOptionPane.YES_OPTION) {
					stopService();
					sendStopToAll();
				}
			}

		});
		exitItem = new JMenuItem("退出(X)");
		exitItem.setMnemonic('X');
		exitItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				stopService();
				sendStopToAll();
				dispose();
			}

		});
		final JMenu helpMenu = new JMenu("帮助(H)");
		helpMenu.setMnemonic('H');
		JMenuItem helpItem = new JMenuItem("帮助(H)");
		// helpItem.setMnemonic('H');
		helpItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_H,
				InputEvent.CTRL_MASK));
		helpItem.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				new HelpServer().main(null);
			}

		});
		setJMenuBar(menuBar);
		menu.add(portItem);
		menu.add(startItem);
		menu.add(stopItem);
		menu.addSeparator();
		menu.add(exitItem);
		helpMenu.add(helpItem);
		menuBar.add(menu);
		menuBar.add(helpMenu);

		final JToolBar toolBar = new JToolBar();
		toolBar.setBounds(0, 0, 435, 32);
		getContentPane().add(toolBar);

		final JPanel panel = new JPanel();
		panel.setLayout(null);
		toolBar.add(panel);

		portSet = new JButton();
		portSet.setText("端口设置");
		portSet.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				new PortConf().main(null);
			}

		});
		portSet.setBounds(2, 0, 87, 26);
		panel.add(portSet);

		startServer = new JButton();
		startServer.setText("启动服务");
		startServer.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				startService();
			}

		});
		startServer.setBounds(108, 0, 87, 26);
		panel.add(startServer);

		stopServer = new JButton();
		stopServer.setText("停止服务");
		stopServer.setEnabled(false);
		stopServer.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				int i = JOptionPane.showConfirmDialog(null, "真的要停止服务吗?",
						"停止服务", JOptionPane.YES_OPTION,
						JOptionPane.QUESTION_MESSAGE);
				if (i == JOptionPane.YES_OPTION) {
					stopService();
					sendStopToAll();
				}
			}

		});
		stopServer.setBounds(201, 0, 87, 26);
		panel.add(stopServer);

		final JButton exitButton = new JButton();
		exitButton.setText("退出");
		exitButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				stopService();
				sendStopToAll();
				dispose();
			}

		});
		exitButton.setBounds(324, 0, 64, 26);
		panel.add(exitButton);

		final JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBounds(5, 38, 401, 327);
		getContentPane().add(scrollPane);

		textArea = new JTextArea();
		textArea.setEditable(false);
		scrollPane.setViewportView(textArea);

		final JLabel label = new JLabel();
		label.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		label.setText("发送至:");
		label.setBounds(10, 379, 60, 22);
		getContentPane().add(label);

		comboBox = new JComboBox();
		comboBox.insertItemAt("所有人", 0);
		comboBox.setSelectedIndex(0);
		comboBox.setBounds(81, 380, 69, 21);
		getContentPane().add(comboBox);

		final JLabel label_1 = new JLabel();
		label_1.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		label_1.setText("发送消息:");
		label_1.setBounds(10, 416, 69, 15);
		getContentPane().add(label_1);

		textField = new JTextField();
		textField.setBounds(81, 413, 221, 21);
		getContentPane().add(textField);

		sysMessageButton = new JButton();
		sysMessageButton.setText("发送");
		sysMessageButton.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				sendSystemMessage();
			}

		});
		sysMessageButton.setBounds(316, 412, 69, 23);
		getContentPane().add(sysMessageButton);

		final JLabel showStatus = new JLabel();
		showStatus.setComponentOrientation(ComponentOrientation.RIGHT_TO_LEFT);
		showStatus.setText("在线人数:");
		showStatus.setBounds(10, 442, 60, 22);
		getContentPane().add(showStatus);

		showStatus_1 = new JLabel();
		showStatus_1.setBounds(71, 442, 91, 22);
		getContentPane().add(showStatus_1);
		//
	}

	public void startService() {
		try {
			serverSocket = new ServerSocket(port, 10);
			textArea.append("服务器已经启动,在" + port + "端口侦听...\n");
			startServer.setEnabled(false);
			startItem.setEnabled(false);
			portSet.setEnabled(false);
			portItem.setEnabled(false);
			stopServer.setEnabled(true);
			stopItem.setEnabled(true);
			textField.setEnabled(true);
		} catch (Exception e) {
			e.printStackTrace();
		}
		userLinkList = new UserLinkList();
		listenThread = new ServerListen(serverSocket, comboBox, textArea,
				showStatus_1, userLinkList);
		listenThread.start();
	}

	public void stopService() {
		try {
			sendStopToAll();
			listenThread.isStop = true;
			serverSocket.close();
			int count = userLinkList.getCount();
			int i = 0;
			while (i < count) {
				node = userLinkList.findUser(i);
				node.input.close();
				node.output.close();
				node.socket.close();
				i++;
			}
			stopServer.setEnabled(false);
			stopItem.setEnabled(false);
			startServer.setEnabled(true);
			startItem.setEnabled(true);
			portSet.setEnabled(true);
			portItem.setEnabled(true);
			textField.setEnabled(false);
			textArea.append("服务器已经关闭!\n");
			comboBox.removeAllItems();
			comboBox.addItem("所有人");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void sendStopToAll() {
		int count = userLinkList.getCount();
		int i = 0;
		while (i < count) {
			node = userLinkList.findUser(i);
			if (node == null) {
				i++;
				continue;
			}
			try {
				node.output.writeObject("服务关闭");
				node.output.flush();
			} catch (Exception e) {
				e.printStackTrace();
			}
			i++;
		}
	}

	public void sendMsgToAll(String msg) {
		int count = userLinkList.getCount();
		int i = 0;
		while (i < count) {
			node = userLinkList.findUser(i);
			if (node == null) {
				i++;
				continue;
			}
			try {
				node.output.writeObject("系统信息");
				node.output.flush();
				node.output.writeObject(msg);
				node.output.flush();
			} catch (Exception e) {
				e.printStackTrace();
			}
			i++;
		}
		textField.setText("");
	}

	public void sendSystemMessage() {
		String s1 = comboBox.getSelectedItem().toString();
		String s2 = textField.getText() + "\n";
		textArea.append(s2);
		if (s1.equalsIgnoreCase("所有人")) {
			sendMsgToAll(s2);
		} else {
			Node node = userLinkList.findUser(s1);
			try {
				node.output.writeObject("系统信息");
				node.output.flush();
				node.output.writeObject(s2);
				node.output.flush();
			} catch (Exception eo) {
				eo.printStackTrace();
			}
			textField.setText("");
		}
	}

}

⌨️ 快捷键说明

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