java 山寨QQ 实现(一)

JAVA实现QQ:实现文字聊天、QQ用户登录、拉取在线用户列表、无异常退出、私聊、发文件、下载文件、离线留言、服务端推送新闻等功能(后端无界面,Utilty源码在后面、) 这个仿QQ项目是参考韩顺平老师的多线程课程做的,因为个人觉得非常有意义特别是让我对多线程通信又了一个新的理解因此我准备写一篇总结(如果觉得视频太长可以参考下): 具体视频地址:大家给韩老师一键三连【韩顺平讲Java】Java网络多线程专题 - TCP UDP Socket编程 多线程 并发处理 文件传输 新闻推送 Java_哔哩哔哩_bilibili那我们直接开始: 1.QQ项目的实现思路: (1)创建一一个服务端(QQClient)和一个客户端(QQServer)和一个公共类(QQcomman) 阅读详情

By EvilBinary 小E

先看界面

//登录对话框代码

package org.evilbinary.client.ui;

import java.awt.Color;
import java.awt.Cursor;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JTextField;

import org.evilbinary.client.QQClient;

public class LoginDialog extends JDialog {
	protected JTextField userName;
	protected JPasswordField userPwd;
	protected boolean isLogin;
	protected QQClient client;
	public LoginDialog() {
		createUI();
		isLogin = false;
		client=null;
		this.setModal(true);

	}

	private void createUI() {
		// this.setFont(MainFrame.font);
		this.setTitle("小E机器人");
		this.setIconImage(this.getToolkit().getImage("image/icon.png"));
		this.setResizable(false);
		this.setSize(340, 250);
		this.setLayout(null);
		JPanel topPanel = new JPanel();
		JPanel midPanel = new JPanel();
		JPanel bottomPanel = new JPanel();
		this.add(topPanel);
		this.add(midPanel);
		this.add(bottomPanel);

		topPanel.setBounds(0, 0, 340, 60);
		// topPanel.setBackground(new Color(245, 237, 253));
		midPanel.setBounds(0, 60, 340, 120);
		// midPanel.setBackground(new Color(100,137,153));
		bottomPanel.setBounds(0, 180, 340, 30);
		// top
		JLabel logo = new JLabel(new ImageIcon("image/logo.gif"));
		logo.setBounds(0, 0, 340, 60);
		this.add(logo);
		// mid
		midPanel.setLayout(new FlowLayout(1, 10, 13));
		userName = new JTextField(13);
		userPwd = new JPasswordField(13);
		userName.setText("10394709");
		userPwd.setText("xxxxxxxxxx");
		userName.setSize(200, 100);
		userName.setBounds(0, 0, 120, 130);
		userPwd.setSize(100, 30);
		JLabel register = new JLabel("申请账号  ");
		register.setCursor(new Cursor(Cursor.HAND_CURSOR));
		register.setForeground(Color.blue);
		JLabel forget = new JLabel("忘了密码?");
		forget.setCursor(new Cursor(Cursor.HAND_CURSOR));
		forget.setForeground(Color.blue);
		midPanel.add(new JLabel("帐号:"));
		midPanel.add(userName);
		midPanel.add(register);
		midPanel.add(new JLabel("密码:"));
		midPanel.add(userPwd);
		midPanel.add(forget);

		JComboBox status = new JComboBox();
		status.addItem("在线");
		status.addItem("Q我");
		status.addItem("离开");
		status.addItem("忙碌");
		status.addItem("勿扰");
		status.addItem("隐身");
		JCheckBox remember = new JCheckBox("记住密码");
		JCheckBox auto = new JCheckBox("自动登录");
		midPanel.add(status);
		midPanel.add(remember);
		midPanel.add(auto);

		// bottom
		bottomPanel.setLayout(null);
		JButton setBtn = new JButton("设置");
		setBtn.setBounds(15, 8, 70, 22);
		JButton loginBtn = new JButton("登录");
		loginBtn.setBounds(250, 8, 70, 22);
		bottomPanel.add(setBtn);
		bottomPanel.add(loginBtn);
		loginBtn.addActionListener(new LoginActionListerner());
		JLabel bottom = new JLabel();
		bottom.setForeground(new Color(191, 225, 249));
		bottom.setBounds(0, 190, 340, 60);
		this.add(bottom);

		this.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		this.setAlwaysOnTop(true);
	}

	public class LoginActionListerner implements ActionListener {

		public void actionPerformed(ActionEvent event) {
			String userName=LoginDialog.this.userName.getText().trim();
			String passWord=new String(LoginDialog.this.userPwd.getPassword());
//			System.out.println(userName);
//			System.out.println(passWord);
			LoginDialog.this.isLogin=true;
			if(userName.equals("")){ 
				JOptionPane.showMessageDialog(LoginDialog.this, "请您输入账户再登录","Error",0);
			}else{
				if(passWord.equals("")){
					JOptionPane.showMessageDialog(LoginDialog.this, "请输入密码再登录","Error",0);
				}else{
					client=new QQClient(userName,passWord,"?");
					if(client.login()){	
						LoginDialog.this.setVisible(false);
					}else{
						LoginDialog.this.setVisible(true);
					}
				}
			}
			
		}
	}

	public void showDialog() {
		this.setVisible(true);
	}
}

//皮肤是用 com.seaglasslookandfeel   http://code.google.com/p/seaglass/ 这里下载

//皮肤使用方法代码如下

	try {
				UIManager.setLookAndFeel(new SeaGlassLookAndFeel());
				// UIManager.getLookAndFeelDefaults().put("defaultFont", new
				// Font("Microsoft Yahei", Font.PLAIN, 12));
				MainFrame frame = new MainFrame();
			} catch (UnsupportedLookAndFeelException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}



山寨版QQ项目 github网址: https://github.com/Nereus-Minos/java-QQ 一、客户端 1、登录界面 先在连接服务器处创建好友列表,在登录界面去刷新即可 用this.dispose();来销毁登录界面 2、好友界面 如果好友在线,则显示彩色头像,反之显示灰色头像 思路:当一个用户登录成功后,就像服务器发送一个好友请求返回在线好友的包,服... 阅读详情

相关推荐

Java小程序之简单多人聊天室的实现(山寨QQ前传)

Java小程序之简单多人聊天室的实现(山寨QQ前传) 一、前言: 通过对Java服务器生猛上手的学习,已经基本明白了Java中通信的基本原理,以及服务器,ip,ip地址的概念; 我们思考下服务器到底是用来干嘛的呢?当多台客户端连上服务器以后,服务器需要提供的就是为连接进来的客户端提供相应的服务;具体的来说就是处理不同客户端发来的消息或者数据,然后把这些消息或者数据发送到另外的客户端;

BlueSky_USC的博客 8006

Java实现简单的QQ登录界面

学习了Java的GUI后,尝试着做了一个仿QQ登录界面,感觉还行,简单地实现了自动登录,记住密码,以及连接数据库判断账号密码的功能。 运行效果: package a; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import jav...

虚言假面的博客 2万+

Java实现伪QQ项目

​ 该实验通过运用事件处理、输入输出流、接口、多线程等相关知识,完成一个伪QQ聊天的程序。

m0_59752996的博客 681

Java实现 -- QQ通信程序

Java实现 -- QQ通信程序

c_y_s_的博客 3588

模拟即时通讯软件开发:韩顺平山寨版QQ项目

本文还有配套的精品资源,点击获取 简介:“韩顺平山寨版QQ”是一个模仿QQ设计的软件,它复制了QQ的界面风格并实现了基础的通信功能,包括用户登录和服务器监听等。这个项目以教学或个人学习为目的,旨在帮助开发者理解即时通讯软件的基本构建原理。该软件可能包括登录验证、消息实时通信、错误处理、状态更新以及基本的聊天室和好友列表管理功能。 1. 韩顺平山寨版QQ概述 ...

weixin_35370061的博客 977

山寨java版qq

山寨版局域网聊天软件 能添加好友 查找好友 登录后显示好友列表 能支持聊天。包括服务器,客户端两个。

超详细带你用Java实现QQ的聊天功能

超详细带你用Java实现QQ的聊天功能 步骤: 1.定义JFrame窗体中的组件 2.在构造方法中初始化窗口的组件 3.使用网络编程完成数据的链接(TPC,UDP 协议) 4.实现"发送”按钮的监听点击事件 5.实现“回车键”发送数据...

鱼干的博客 2万+

Java山寨版QQ

用Java实现的上寨版QQ。可以实现客户服务器端的简单通信。

山寨qq java_MTK手机QQjava版本山寨qq2009通用版

MTK手机QQjava版山寨qq2009通用版MTK手机QQjava版山寨qq2009通用版为了满足国内手机用户对正版手机QQ的迫切需求,腾讯于2010年6月发布了该版本,全面构建-在手机QQ浏览器中,支持网站导航qq浏览器java通用版jar,支持丰富的手机QQ菜单设置等,可以实现一站式满足用户聊天和上网需求. 以下是对该版本QQ手机主要功能的详细评估: 新功能1: 一套新的五个皮肤. 编辑器刚...

weixin_32799203的博客 1412

[LVGL] 刷新率优化

实验硬件:STM32F407ZGT6;2.4寸TFT-LCD模块(ILI9341驱动芯片、XTP2046触摸芯片)本文目标:lvgl的刷新率优化,解决拉帘子问题注意:本文在LVGL显示触摸代码移植完成的基础上进行,第一次使用lvgl可根据前文一步步移植,点击下方传送门查看相关文章传送门:STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(一)STM32F4驱动ILI9341的TFT-LCD触摸屏(HAL库)(二)[LVGL] 显示代码移植 基于STM32F4。

2301_77117901的博客 2784

海康视觉脚本开发全流程解析

本文详细解析了海康机器视觉平台(VM)中脚本模块的开发全流程。从创建第一个脚本模块入手,深入讲解了输入参数、输出参数与内部变量的定义与区别,并提供了C#脚本编写、公用函数调用、代码结构组织以及编译调试的实用指南。旨在帮助开发者掌握海康视觉脚本开发的核心技巧,高效实现复杂的自定义视觉逻辑处理。

beer8的博客 600

java编写的山寨qq_java 山寨QQ 实现(一)

By EvilBinary 小E先看界面 //登录对话框代码package org.evilbinary.client.ui;import java.awt.Color;import java.awt.Cursor;import java.awt.FlowLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionLis...

weixin_42429120的博客 323

SPWM波调制度原理

SPWM波调制度原理

qq_43557686的博客 1万+

java山寨qq_java图形界面之 山寨QQ登陆界面

要山寨出QQ登陆界面,首先要对java的图形界面有一定的了解。在jdk1.4之前,图形界面所用到的所有类和接口都在javax.awt之下,在其之后就都在javax.swing里了。关于图形界面的开发其实就类似于搭积木的过程,我们把所需要的控件一个一个的摆放到窗口里面我们所需要的位置,一个图形界面就算基本完成了。下面我们就拿QQ的登陆界面做一个示范。首先我们先了解一下图形界面中所用到的一些基本的控件...

weixin_42523846的博客 394

数字IC后端实战:OCC电路时钟树综合的5个关键技巧(附Synopsys工具配置)

本文深入探讨了数字IC后端设计中OCC电路时钟树综合的实战技巧。针对工具自动平衡导致的绕线拥塞和时序问题,文章提出了分段处理的核心思路,并详细阐述了通过物理隔离、分段长树策略以及Synopsys工具链(如ICC2、PrimeTime)的精准配置来优化function clk与occ clk路径的关键方法,旨在提升时序收敛性和可制造性。

jwt8token的博客 855

Linux----Ubuntu系统官网下载iso镜像文件

Linux----Ubuntu系统官网下载iso镜像文件

MQ0522的博客 5万+

山寨版QQ聊天室

山寨版QQ聊天室(网络编程) 用到的知识:MySQL、SpringBoot整合Mybatis、Socked、JFrame、各监听器、多线程、IO流等 文章目录山寨版QQ聊天室(网络编程)前言一、网络通信是什么?二、网络是什么?三、IP地址是什么?四、Socked是什么?五、山寨版QQ聊天室项目1.基本功能介绍2.功能一:QQ登录验证总结 前言 近几年来,QQ成为了很多人的必备聊天软件,那么随之而来的思考就是QQ聊天的底层实现方式是怎样的呢?带着这个疑惑就接触到了JAVA的网络编程,于是就利用网络编程的相

qq_45868911的博客 960

Python画柱状图(双柱状图,三柱状图)且显示对应数值

使用python实现双柱状图和三柱状图,并且在柱状图形的顶部显示对应数值;

yue200403的博客 1万+

Java山寨QQ

1.项目说明 程序以三天时间写完 虽然 披星戴月 写完一点点程序然后修复大量Bug但还是不放心,但有一点我深信,那就是按套路来屁事没有 风格可能不一样,我通常是一个文件夹然后里面塞满大量程序,就没必要引包,但是太多还是有缺点的 1.1.怎么用 1.1.1.启动服务器 我不是直接启动服务器,而是用一个程序来控制服务器的开关 运行MyServerFrame.java 1.1.2.启动客户端 运行ShanZhaiQQ.java 1.1.3.好友列表界面+登录界面 用户名:1~50,密码:123456 注意:用户名

一个无聊的程序猿 1045

手把手教你学simulink(31.31)--双向DCDC电源场景示例:设计并实现一个基于变频控制的双向降压变换

设计并实现一个基于 Simulink 的双向降压变换器,能够在充电模式(从高压侧向低压侧传输能量)和放电模式(从低压侧向高压侧传输能量)之间切换,确保输出电压稳定,并根据负载变化自动调整工作模式。

MHD0815的博客 343

组态王的日历时间控件脚本

日期时间控件中的脚本中在小于10的月份和天数前必须要加上0,这是由首字符对比机制规定的,首字母相同,就不再不做对比了,比如1和11,是一样的。首字母不同,再比较下一位。 float Ayear1; float Amonth1; float Aday1; string temp1; Ayear1=sd.Year; Amonth1=sd.Month; Aday1=sd.Day; temp1=StrFromInt( Ayear1, 10 ); if(Amonth1<10) temp1=temp1+"-0"+

逍遥子的博客 5717

java开发山寨版qq项目_【Java小项目】山寨QQ

最近看着韩顺平老师的视频加上百度谷歌做了这个小玩意。主要功能:服务器端:1.选择监听端口2.打印服务器日志3.查看在线用户(强制下线没做)客户端:1.登陆的密码我写死到程序里了(密码是一个空格)2.三个分组可切换3.可多对多聊天4.A找B好友聊天时,若B好友没有打开与A聊天的界面,则B与A聊天的界面会直接弹出5.可以选择要链接的服务器的地址和端口6.上线,下线好友头像会有相应变化思路:服务器和客户...

weixin_39772849的博客 423

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

java编写的山寨qq_JAVA写的山寨版QQ(登录界面和好友列表)

登录界面:QqClientLogin.java/*** Date:2011/07/15* 功能:QQ登入界面*/package com.qq.client.view;import javax.swing.*;import com.sun.crypto.provider.JceKeyStore;import java.awt.*;import java.awt.event.*;public clas...

weixin_39980347的博客 291

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

山寨QQ新得

山寨QQ过程心得

zzzypp的专栏 849

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

我的山寨QQ之旅

刚学Java那会,其实没啥兴趣。开始就是配置个环境变量,当时都不知道是什么玩意,老师也不解释,就跟着他配置。然后用记事本写个类,写个main方法,然后编译运行。都是控制台,完全就没学下去的兴趣,所以第一年两个学期上课都玩手机去了。终于第二年的期末项目是JQQ,这下来兴趣了,于是网上收集各种资料,恶补Java。下载了各种聊天程序的源码,无奈当时都没入门,只能把其他程序的源码东拼西凑的做成自己的程序,...

onlyxiahui的专栏 250

java虚拟机 山寨机_十年前的山寨机居然有系统?没错,还是纯国产的

文丨太平洋数码苍茫的天涯是我的爱,绵绵的青山脚下花正开,什么样的节奏是最呀最摇摆……你是我天边最美的云彩,让我用心把你留下来(留下来)……不知道大家是否还记得这段熟悉的旋律,总之小编我今天再次回听这首歌的时候身体依然会不由自主的摇摆,时间仿佛一下定格,而脑海中的记忆也仿佛穿梭回那个还稍显破败的年代。记得在那个年代,高楼大厦还远不如今天琳琅满目,那个时候网络也远不如现如今一般发达,那个时候能买得起大...

weixin_33905143的博客 863
上一篇: 自己动手写操作系统二(编写内核Hello World 教程)
下一篇: java 山寨QQ 实现(二)
EvilBinary_root
博客等级 码龄16年 104粉丝 64原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值