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

📄 chatserver.java

📁 网络通信系统
💻 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 + -