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

📄 serverframe.java

📁 本例中聊天服务器默认于本地8000端口建立服务; 本例中聊天客户端默认连接59.64.7.48地址8000端口服务器;因为客户端没有提供服务器IP设置接口
💻 JAVA
字号:
/*
 * Created on 2004-12-14
 *
 * To change the template for this generated file go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */

/**
 * @author mq
 *
 * To change the template for this generated type comment go to
 * Window>Preferences>Java>Code Generation>Code and Comments
 */
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;

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

public class ServerFrame extends JFrame {
	private JButton jbStartServer;
	private JButton jbStopServer;
	private Border border;
	private ServerSocket serverSocket;
	private JComboBox combobox;
	private JTextArea textarea;
	private JTextField textfield;
	private JTextField systemMsg;
	private UserInfoList userInfoList;
	
	private ServerListenThread listenThread;

	public ServerFrame()
	{
		super("ServerFrame");
		
		init();
		
		setSize(370,570);
		show();
	}
	
	public void init()
	{
		Border bevelBorder = BorderFactory.createBevelBorder(BevelBorder.RAISED,
			Color.white,Color.white,Color.white,Color.white);
		Border emptyBorder = BorderFactory.createEmptyBorder(1,1,1,1);
		border = BorderFactory.createCompoundBorder(bevelBorder ,emptyBorder );
		
		jbStartServer = new JButton("startServer");
		jbStopServer  = new JButton("StopServer" );
		jbStopServer.setEnabled(false);
		
		jbStartServer.addActionListener(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					startServer();
				}
			}
		);
		
		jbStopServer.addActionListener(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					stopServer();
				}
			}
		);
		
		combobox = new JComboBox();
		combobox.insertItemAt("all",0);
		combobox.setSelectedIndex(0);
		
		textarea = new JTextArea(20,20);
		textarea.setEditable(false);
		
		textfield = new JTextField(40);
		textfield.setEditable(false);
		
		systemMsg = new JTextField(40);
		systemMsg.setEnabled(false);
		systemMsg.addActionListener(
			new ActionListener()
			{
				public void actionPerformed(ActionEvent e)
				{
					sendSystemMessage();
				}
			}
		);
		
		this.addWindowListener(
			new WindowAdapter()
			{
				public void windowClosing(WindowEvent e)
				{
					stopServer();
					System.exit(0);
				}
			}
		);
		
		Container c = getContentPane();
		c.setLayout(null);//
		
		jbStartServer.setBorder(border);
		jbStartServer.setBounds( 30,30,90,30);
		jbStopServer .setBorder(border);
		jbStopServer .setBounds(150,30,90,30);
		
		textfield.setBounds(30, 75,300, 20);
		textarea .setBounds(30,110,300,300);
		combobox .setBounds(30,425, 90, 30);
		systemMsg.setBounds(30,470,300, 20);
		
		c.add(jbStartServer,null);
		c.add(jbStopServer ,null);
		c.add(textfield,null);
		c.add(textarea ,null);
		c.add(combobox ,null);
		c.add(systemMsg,null);
	}
	
	public void startServer()
	{
		try
		{
			serverSocket = new ServerSocket(8000,10);
			textarea.append("server start at 8000 port ...\n");
			
			jbStartServer.setEnabled(false);
			jbStopServer .setEnabled(true);
			systemMsg.setEnabled(true);
		}
		catch (Exception e)
		{
			//
		}
		userInfoList = new UserInfoList();
		
		listenThread = new ServerListenThread(
			serverSocket,
			combobox,
			textarea,
			textfield,
			userInfoList);
		listenThread.start();
	}
	
	public void stopServer()
	{
		try
		{
			sendStopToAll();
			listenThread.isStop = true;
			serverSocket.close();
			
			int count = userInfoList.getCount();
			
			int i =0;
			while( i < count)
			{
				Node node = userInfoList.find(i);
				
				node.input .close();
				node.output.close();
				node.socket.close();
				
				i ++;
			}
			
			jbStartServer.setEnabled(true);
			jbStopServer .setEnabled(false);
			systemMsg.setEnabled(false);
			
			combobox.removeAllItems();
			combobox.addItem("all");
		}
		catch(Exception e)
		{
			//
		}
	}
	
	public void sendStopToAll()
	{
		int count = userInfoList.getCount();
		
		int i = 0;
		while(i < count)
		{
			Node node = userInfoList.find(i);
			if(node == null) 
			{
				i ++;
				continue;
			} 
			
			try
			{
				node.output.writeObject("服务关闭");
				node.output.flush();
			}
			catch (Exception e)
			{
				//
			}
			
			i++;
		}
	}	
	
	public void sendMsgToAll(String msg)
	{
		int count = userInfoList.getCount();
		
		int i = 0;
		while(i < count)
		{
			Node node = userInfoList.find(i);
			if(node == null) 
			{
				i ++;
				continue;
			} 
			
			try
			{
				node.output.writeObject("系统信息");
				node.output.flush();
				node.output.writeObject(msg);
				node.output.flush();
			}
			catch (Exception e)
			{
				//
			}
			
			i++;
		}
	}	

	public void sendSystemMessage()
	{
		String toSomebody = combobox.getSelectedItem().toString();
		String message = systemMsg.getText() + "\n";
		
		textarea.append(message);
		
		if(toSomebody.equalsIgnoreCase("all"))
		{
			sendMsgToAll(message);
		}
		else
		{
			Node node = userInfoList.find(toSomebody);
			
			try
			{
				node.output.writeObject("系统信息");
				node.output.flush();
				node.output.writeObject(message);
				node.output.flush();
			}
			catch(Exception e)
			{
				//
			}
		}
	}
}

⌨️ 快捷键说明

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