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

📄 liaoserver.java

📁 在参加培训时做的一个聊天室
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
//==========================
//引入类包
import java.awt.*;//除以“J”打头的控件以外的类包
import javax.swing.*;//以“J”打头的控件类包
import java.awt.event.*;//实现事件
import java.net.*;//实现网络通信
import java.io.*;//实现流信息的传递
import java.util.*;//实现线程
import java.util.Date;//封装系统日期和时间信息
import java.util.Calendar;
import java.util.GregorianCalendar;
//=====================================================
//声明两个接受登陆信息和注册信息的类
class LoginMessage extends Object implements Serializable
{	
	String name,password;
}
class Message implements Serializable
{
	String name,password,sex,birth,email,question,answer;
}//接受登陆信息和注册信息的类结束
//==============================================================
//声明一个公有类
public class liaoserver extends JFrame implements ActionListener
{
    JPanel jp;//容器框架变量
	JLabel jl_title,jl_name,jl_pw,jl_p,jl_p1,jl_p2,jl_p3;//静态文本变量
	JTextField jt_name,jt_time;//文本框变量
	JButton jb,jb2;//按钮变量
    GridBagLayout gb;//网格包变量
	GridBagConstraints gbc;//设置网格包属性变量
    Socket client,client1,client2;//三个套接字变量
	TextArea jta;//显示信息的文本框变量
	ServerSocket dengluSocket;//登录服务器套接字
	ServerSocket zhuceSocket;//注册服务器套接字
    ServerSocket serverS;//聊天服务器套接字
	Thread th;//设置时间和日期
	Date date;//显示日期的变量
	GregorianCalendar calendar;//显示时间的变量
	String strDate,strTime,strStatus;//存储时间的字符串变量
	Message z;//注册类的变量
	LoginMessage l;//登陆类的变量
	InetAddress myComputer;//显示主机的IP地址变量
	Label IPLabel;//静态文本变量
	TextField IP;//文本框变量
	String ip;//存储IP地址的字符串变量
	//====================================
	//构造函数
	public liaoserver()
	{
		super("*兔巴哥*聊天系统服务器");
		jp=new JPanel();//初始化容器控件
		setContentPane(jp);//把容器添加到框架中去
		setDefaultCloseOperation(EXIT_ON_CLOSE);//设置应用程序的关闭
		jp.setBackground(new Color(225,166,248));//设置容器的背景颜色
		//============初始化静态文本
		jl_p=new JLabel(new ImageIcon("image/dialup.gif"));
		jl_p1=new JLabel(new ImageIcon("image/Mail028.gif"));
		jl_p2=new JLabel(new ImageIcon("image/cupanim.gif"));
		jl_p3=new JLabel(new ImageIcon("image/Spot.gif"));
		jl_title=new JLabel("*兔巴哥*聊天系统服务器");//初始化标题
		Font f=new Font("华文彩云",Font.BOLD,24);//设置字体属性
		Font font=new Font("华文新魏",Font.BOLD,18);//设置字体属性
		jl_title.setFont(f);//添加字体属性
		jl_title.setForeground(Color.red);//设置字体颜色
		jl_name=new JLabel("发送信息");//初始化标题
		jl_name.setFont(font);//添加字体属性
		jl_name.setForeground(Color.black);//设置字体颜色
		jl_pw=new JLabel("显示");
		jl_pw.setFont(font);//添加字体属性
		jl_pw.setForeground(Color.black);//设置字体颜色
		
		//==================================
		//显示主机IP和Host
		IPLabel=new Label("IP:");
		IPLabel.setFont(font);//添加字体属性
		IPLabel.setForeground(Color.black);
		try
		{
			myComputer=InetAddress.getLocalHost();	//取得主机位置对象
		}
		catch (UnknownHostException e)
		{}
		ip=myComputer.getHostAddress();

		System.out.println(ip);

		IP=new TextField(ip,10);
		IP.setEditable(false);//IP不可编辑
		//==============初始化文本框
        jt_name=new JTextField(20);	
		jt_time=new JTextField(20);
		//==============初始化按钮
		jb=new JButton("发送");
		jb.setForeground(Color.black);//设置字体颜色
		jb.setFont(font);//添加字体属性
		jb2=new JButton("清除");
		jb2.setForeground(Color.black);//设置字体颜色
		jb2.setFont(font);//添加字体属性
		//============实现按钮的监听
		jb.addActionListener(this);
		jb2.addActionListener(this);
		//=============初始化信息框
		jta=new TextArea("==欢迎进入*兔巴哥*聊天室==",10,30);
		jta.setEditable(false);//jta不可编辑
		Font font1=new Font("华文新魏",Font.BOLD,14);//设置字体属性
		jta.setForeground(Color.blue);//设置字体颜色
		jta.setFont(font1);//添加字体属性
		//============初始化网格包属性
        gb=new GridBagLayout();
		gbc=new GridBagConstraints();
		jp.setLayout(gb);//将网格包添加到容器中去
		//设置控件标题“*兔巴哥*聊天系统服务器”的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.CENTER;
		 gbc.gridx=3;
		 gbc.gridy=1;
		 gb.setConstraints(jl_title,gbc);
		 jp.add(jl_title);
         //添加图片位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.CENTER;
		 gbc.gridx=3;
		 gbc.gridy=0;
		 gb.setConstraints(jl_p,gbc);
		 jp.add(jl_p);
		 //添加图片位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.CENTER;
		 gbc.gridx=2;
		 gbc.gridy=2;
		 gb.setConstraints(jl_p1,gbc);
		 jp.add(jl_p1);
		 //添加图片位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.CENTER;
		 gbc.gridx=3;
		 gbc.gridy=2;
		 gb.setConstraints(jl_p2,gbc);
		 jp.add(jl_p2);
		 //添加图片位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.CENTER;
		 gbc.gridx=4;
		 gbc.gridy=2;
		 gb.setConstraints(jl_p3,gbc);
		 jp.add(jl_p3);
		 //设置控件时间框的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.NORTH;
		 gbc.gridx=3;
		 gbc.gridy=6;
		 gb.setConstraints(jt_time,gbc);
		 jp.add(jt_time);
		 jt_time.setEditable(false);//jt_time不可编辑
		 //设置控件标题“IP”的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.NORTH;
		 gbc.gridx=1;
		 gbc.gridy=7;
		 gb.setConstraints(IPLabel,gbc);
		 jp.add(IPLabel);
		 //设置控件IP框的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.NORTH;
		 gbc.gridx=3;
		 gbc.gridy=7;
		 gb.setConstraints(IP,gbc);
		 jp.add(IP);
		//设置控件标题"显示:"的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.CENTER;
		 gbc.gridx=3;
		 gbc.gridy=11;
		 gb.setConstraints(jl_pw,gbc);
		 jp.add(jl_pw);
		//设置控件信息框的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.WEST;
		 gbc.gridx=3;
		 gbc.gridy=13;
		 gb.setConstraints(jta,gbc);
		 jp.add(jta);
		//设置控件标题“发送信息:”的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.WEST;
		 gbc.gridx=1;
		 gbc.gridy=18;
		 gb.setConstraints(jl_name,gbc);
		 jp.add(jl_name);
		//设置控件要发送的信息框的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.WEST;
		 gbc.gridx=3;
		 gbc.gridy=18; 
		 gb.setConstraints(jt_name,gbc);
		 jp.add(jt_name);
		//设置控件按钮"发送"的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.WEST;
		 gbc.gridx=5;
		 gbc.gridy=18;
		 gb.setConstraints(jb,gbc);
		 jp.add(jb);
		//设置控件按钮"清空"的位置
		 gbc.fill=GridBagConstraints.BOTH;
		 gbc.anchor=GridBagConstraints.WEST;
		 gbc.gridx=7;
		 gbc.gridy=18;
		 gb.setConstraints(jb2,gbc);
		 jp.add(jb2);
		//======初始化时间线程
		 A a=new A();
		 a.start();
//===========================================
//开辟三个端口:
		 try
		{
			serverS=new ServerSocket(1001);//聊天端口
			liao l=new liao();
			l.start();
		}
		catch(Exception e)
		{
			System.out.println("聊天端口开辟错误!");
		}
		 try
		{
			zhuceSocket=new ServerSocket(1002);//注册端口
			Zhuce z=new Zhuce();
			z.start();
		}
		catch(Exception e)
		{
			System.out.println("注册端口开辟错误!");
		}
		try
		{
			dengluSocket=new ServerSocket(1003);//登陆端口
			Denglu d=new Denglu();
			d.start();
		}
		catch(Exception e)
		{
			System.out.println("登陆端口开辟错误!");
		}
		//===========设置框价的大小及它的属性应是显示的
		 setSize(700,600);
		 setVisible(true);
	}//构造函数结束
//========================================================
//设置时间线程
	class A extends Thread
	{
		Thread th=new Thread();
		public void run()
		{
		   while(true)
		   {
			  display();//调用下面的成员函数
				try
				{
					th.sleep(1000);//睡眠一秒种
				}
				catch(Exception e)
				{
				   System.out.println(" 时间线程错误!!!");
				}
		   }
			
		}
	}
	public void display()
	{
		Font f=new Font("Times new Roman",Font.BOLD,14);

⌨️ 快捷键说明

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