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

8.2-12.4GHz喇叭天线设计

使用后处理模板的优化算法,对a1、h_horn、b1进行优化,各参数的优化区间即为之前计算得到的参数范围。由于矩形喇叭的辐射特型基本上是E面和H面扇形喇叭的结合,当波导中只是单模传播(只有TE波)时,矩形喇叭的口径可以通过远场公式推理出来。表示矩形喇叭的口径效率,进行最佳增益设计时,一般取值为0.5。从表中可以看出,该结构在8.58GHz的增益误差为2.68%>2.5%,需要对结构进行优化。建模完成,之后就是在矩形波导尾部添加波导端口激励,以及对应频率的远场监视器。,在这里,将频率定为区间的中心频率。

qq_48897427的博客 6656

保姆级教程:在爱快iKuai虚拟机里装OpenWrt旁路由,实现去广告和特殊功能

本文提供在爱快iKuai虚拟机中安装OpenWrt旁路由的详细教程,帮助用户实现去广告和特殊功能扩展。通过分步指导,包括虚拟机配置、网络设置和功能优化,打造稳定高效的家庭网络环境,特别适合软路由爱好者和网络管理员。

weixin_31364787的博客 824

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

TSC条码打印机C#例程(tsclib.dll调用) 【转】

//----program.cs using System;using System.Collections.Generic;using System.Windows.Forms; using System.Runtime.InteropServices;public class TSCLIB_DLL{[DllImport("TSCLIB.dll", EntryPoint = "abou...

weixin_33843947的博客 2441

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

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

weixin_42523846的博客 394

高速PCB设计中的信号完整性挑战:回损、插损与串扰的深度解析

本文深入探讨了高速PCB设计中的信号完整性挑战,重点分析了回损、插损与串扰三大关键问题。通过实际案例和专业技术解析,提供了降低回损的阻抗控制技巧、减少插损的板材选择建议以及抑制串扰的布线策略,帮助工程师应对5G和AI芯片时代的高速信号传输需求。

websocket5live的博客 264

【WB32库开发】第9章 TIM1高级定时器——输出多路PWM

PWM(Pulse Width Modulation)意为脉冲宽度调制,简称脉宽调制 。在工控行业,PWM信号可以用来调节电机转速、调节变频器以及BLDC电机驱动等;在LED照明行业,可以通过PWM来控制LED的亮暗变化;还可以通过PWM信号来控制无源蜂鸣器发出简单的声音等。 WB32也可输出PWM,需配置WB32上的定时器。 在WB32中有4个定时器,其中TIM1为高级定时器,TIMx(2-4)为通用定时器,这四个定时器均挂载在APB1总线上,每个定时器都可以输出4路PWM。 本章需要使用固件库TIM例程

北海村夫的博客 4637

山寨版QQ聊天室

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

qq_45868911的博客 960

国内网络环境下Calico v3.26.4安装避坑指南(附华为云镜像加速脚本)

本文为国内开发者提供Calico v3.26.4的高效部署指南,重点介绍如何通过华为云镜像加速服务解决Kubernetes集群网络插件镜像拉取问题。文章包含详细的镜像加速脚本、部署清单修改方法及深度排错技巧,帮助开发者快速完成Calico网络插件的安装与配置。

brown的博客 288

Java山寨QQ

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

一个无聊的程序猿 1045

RK3568平台(网络篇)添加网络交换芯片RTL8306M

该交换芯片支持I2C、SPI、mdio通信,但是看ast1520的uboot代码采用的是mdio去通信phy芯片的,所以暂时也先采用mdio的方式,需要配置相应的引脚才可以配置成mdio通信模式,具体的配置硬件工程师解决。RTL8306M芯片上可能没有提供MDC/MDIO接口,可以通过GPIO(General Purpose Input/Output)来模拟,GPIO可实现串行输入输出,且一般CPU上会提供很多GPIO接口供用户自定义使用。

weixin_49303682的博客 3934

【HAL库】STM32CubeMX开发----STM32F407----ETH+LAN8720A+LWIP----ping通

本次实验以芯片为MCU,使用25MHz外部时钟源。以太网PHY层芯片为LAN8720A,由MCU引脚PA8提供时钟。

MQ0522的博客 4843

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

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

weixin_39772849的博客 423

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

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

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

山寨QQ新得

山寨QQ过程心得

zzzypp的专栏 849

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

我的山寨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、付费专栏及课程。

余额充值