Java山寨QQ

1.项目说明

程序以三天时间写完
虽然 披星戴月 写完一点点程序然后修复大量Bug但还是不放心,但有一点我深信,那就是按套路来屁事没有

1.1.怎么用

1.1.1.启动服务器

之前的话还是用一个程序来控制服务器的开关,但是后来想想也是画蛇添足,便没用了
删了
过后,我把服务器源码稍微修改了那么一点,可它本质不动,然后现在就变的好看多了
原来的
在这里插入图片描述
在这里插入图片描述
之后的
在这里插入图片描述
在这里插入图片描述
是不是好看多了呢

1.1.2.启动客户端

运行ShanZhaiQQ.java
在这里插入图片描述
这也是比较难看的了

1.1.3.好友列表界面+登录界面

用户名:1~50,密码:123456
注意:用户名只能是1~50,因为这里聊天对象名默认为1-50,这样会找不到聊天对象,会报错
成功登录后,双击你想聊天的对象,即可弹出聊天窗口
在这里插入图片描述

1.1.4.聊天窗口(待更)

聊天窗口只能进行1对1对话,如果登录3个账号,对其中一人聊天,会报错
多对多对话还未完成,但是可以进行登录2个账号,对其中一人聊天了!
在这里插入图片描述

1.1.5.发送消息

文本框里输入你想聊天的话,点击发送即可
在这里插入图片描述

2.下载

(悄悄咪咪把链接放在这应该没有人知道啊)
提取码:qy4k
链接是旧版的,我现在内存也不足了,所以👇

3.更改核心源码

把你的双手动动,就可以了!
在这里插入图片描述
在这里插入图片描述
这就是运行服务器的效果

1.解脱

把MyServerFrame.java无情的删了
之后别忘了在服务器增加一段代码

public static void main(String []args){
	QQServer qs =new QQServer();
}

这样咱们的服务器才算是正式解脱别人的控制

2.窗口设置

如果不想要一个美丽的窗口,而是在控制台输出一些低级玩意,亏自己是个程序猿

2.1.定义需要的组件

两个Panel,一个按钮,完成!

//定义需要的组件
JPanel jp1,jp2;
JButton jb1;

2.2.创建组件

组件定义好了,就要创建
jp1为第一个画板,它负责用来安装按钮,放在北部

jp1 =new JPanel();
		jb1 =new JButton("关闭服务器");
		jb1.addActionListener(this);//监听是否按下按钮
		jp1.add(jb1);//安装按钮
		jp2 =new JPanel(new GridLayout(20,1,1,1));//设有20个用户登录信息

2.2.数组+监听事件

监听事件就要用到接口ActionLitener,用来监听按钮点击事件

implements ActionListener

之后添加未实现的方法,在那里增加一段语句

public void actionPerformed(ActionEvent e) {
		// TODO 自动生成的方法存根
		//如果按下按钮,就关闭服务器
		if(e.getSource()==jb1){
			System.exit(0);
		}
	}

有20个用户登录信息,那么咱们就用Label为类型

JLabel []jp =new JLabel[50];

之后把用户信息get到,放到Label再安装再安装

int i=0;
jp[i] =new JLabel("用户ID:"+u.getName()+"          密码:"+u.getPass()+"           登录时间:"+dateFormat.format(date));
jp2.add(jp[i]);
this.add(jp2);
i++;

为此程序完成
我再发一遍全部源码吧

/**
 * 功能:
 * 1.这是qq服务器,它在监听,等待某个qq客户端,来连接
 * 2.加强,有窗口
 */
package qqProject;

import java.net.*; 
import java.text.*;
import java.util.*;
import java.io.*;

import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
@SuppressWarnings({"unused","resource","serial"})
public class QQServer extends JFrame implements ActionListener {

	//定义需要的组件
	JPanel jp1,jp2;
	JButton jb1;
	
	int i=0;
	
	public static void main(String []args){
		QQServer qs =new QQServer();
	}
	
	public QQServer() 
	{
		//创建
		JLabel []jp =new JLabel[50];
		jp1 =new JPanel();
		jb1 =new JButton("关闭服务器");
		jb1.addActionListener(this);
		jp1.add(jb1);
		jp2 =new JPanel(new GridLayout(20,1,1,1));
		
		try{
			//在9999监听
			ServerSocket ss =new ServerSocket(9999);
			
			this.add(jp1,"North");
			this.setSize(500,400);
			this.setVisible(true);
			this.setTitle("后台管理");
			this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
			
			//阻塞,等待连接
			while(true)
			{
				Socket s =ss.accept();
				
				//获取当前时间
				Date date = new Date();
				SimpleDateFormat dateFormat= new SimpleDateFormat("HH:mm:ss");
				
				//接收客户端发来的信息
				ObjectInputStream ois =new ObjectInputStream(s.getInputStream());
				User u=(User)ois.readObject();
				Message m =new Message();
				ObjectOutputStream oos =new ObjectOutputStream(s.getOutputStream());
				
				//每次创建一个Label并安上给jp2
				jp[i] =new JLabel("用户ID:"+u.getName()+"          密码:"+u.getPass()+"           登录时间:"+dateFormat.format(date));
				jp2.add(jp[i]);
				this.add(jp2);
				i++;
				if(u.getPass().equals("123456")){
					//返回一个成功登录的信息包
					m.setMesType("1");
					oos.writeObject(m);
					
					//这里就单开一个线程,让该线程与该客户端保持通讯
					SerConClientThread scct =new SerConClientThread(s);
					ManageClientThread.addClientThread(u.getName(),scct);
					
					//启动与该客户端通讯的线程
					scct.start();
				}else{
					m.setMesType("2");
					oos.writeObject(m);
					s.close();
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		this.add(jp2,"South");
	}
	
	public void actionPerformed(ActionEvent e) {
		// TODO 自动生成的方法存根
		//如果按下按钮,就关闭服务器
		if(e.getSource()==jb1){
			System.exit(0);
		}
	}
}

是不是很简单呢

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、具有登陆界面,包括服务器IP(或服务器名)、用户名、密码。 登录:在数据库服务器上验证用户名和密码,如果匹配就进入QQ聊天主界面,否则提示不能登录。 取消:退出即可。 注册:进入用户注册界面。 服务器栏中默认是你要使用的服务器名字,即该服务器安装的数据库,所有qq用户信息都保存在这个服务器的数据库里。图片显示的是我试验的服务器名字。 登录成功后还要把自己当前所在机器的IP地址提取出来并保存到数据库的个人信息中,替换原来注册或上次使用的IP。 2、注册界面,可以让第一次使用的用户注册,即给自己在服务器上注册一个用户名、密码、自己所使用的机器IP、自己的端口号,如图所示: 注册:首先验证密码和确认密码是否一致,如果不一致,则提示,否则,把输入的信息记录到数据库中,如果用户名重复也要提示。 其中IP栏目的内容可以由程序自动提取出本机的ip地址,并显示出来,省得用户输入错误。 3、聊天主界面 登陆成功后就进入本届面,界面如下: 界面设计类似简单的QQ界面,可以使用BorderLayout布局管理器,在上面(BorderLayou.NORTH)显示“好友列表”四个字,中间部分(BorderLayou.CENTER)显示自己的好友名单,名单可以用多个JLabel控件(JLabel中添加ImageIcon)显示,或者用JTree控件显示(比较复杂),名单中可以显示qq号、昵称(姓名)、状态(在线、离线等)。最下边(BorderLayou.SOUTH)可以显示“欢迎您:***”。 好友要求用不同的图标显示在线和不在线的状态。 双击在线的好友名字可以打开聊天窗口,而双击不在线的好友不动(即不开启聊天窗口)。 达到这种效果的前提是在登录成功后,获得当前登录用户的信息,在本模块根据登录信息获取用户名、获取他的好友列表等数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值