📄 liaoserver.java
字号:
//==========================
//引入类包
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 + -