Java实现最简单局域网QQ

article/2025/9/29 2:08:18

        Java实现局域网QQ,这是最简单的实现了。整个系统只有一个服务器端和一个客户端,成功建立连接后,服务器端发消息给客户端,客户端发消息给服务器端。最上边的文本框是显示接收到的消息的,左边清屏按钮是把接收区域清空的,中间空白的是输入框,右边发送按钮是发送到另一端的,最下面的文本框显示QQ的连接状态。


先来一张图



源代码-服务器端

package server;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class Server extends JFrame {private JButton b1 = new JButton("发送");private JButton b2 = new JButton("清屏");// 输入框private JTextField text = new JTextField(10);// 显示连接状态private JTextField info = new JTextField(10);// 显示文本框private JTextArea area = new JTextArea(10, 25);private DataInputStream in = null;private DataOutputStream out = null;// 是否和客户端已建立连接标识private boolean connect = false;public static void main(String[] args){Server frame = new Server();frame.setTitle("QQ-服务器端");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(600, 500);frame.setVisible(true);frame.showInfo("QQ服务器开始启动...");frame.workCycle(frame);}public Server() {// 为b1按钮添加监听事件,“发送”b1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (connect) {String str = text.getText();text.setText(""); // 设置为空Date date = new Date();DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");area.append(format.format(date) + '\n');area.append("我:" + str + '\n');try {out.writeBytes(str + '\n'); // 加上最后的'\n'为了在另一端显示换行} catch (IOException ex) {ex.printStackTrace();}}}});// 为b2按钮添加监听事件,“清屏”b2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {area.setText("");}});add(BorderLayout.NORTH, new JScrollPane(area));add(BorderLayout.CENTER, text);add(BorderLayout.SOUTH, info);add(BorderLayout.EAST, b1);add(BorderLayout.WEST, b2);}private void showInfo(String str) {info.setText(str);}public void workCycle(Server frame) {try {ServerSocket server = new ServerSocket(60000);Socket socket = server.accept();frame.showInfo("客户端连接成功...");connect = true;in = new DataInputStream(socket.getInputStream());out = new DataOutputStream(socket.getOutputStream());for (;;) { // 始终和客户端连接/*char c = in.readChar();if (c != '\n')area.append("" + c); // (String)c 这样转换竟然不行...elsearea.append("" + '\n');*/String str = in.readLine();Date date = new Date();DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");area.append(format.format(date) + '\n');area.append("client: " + str + '\n');}}catch (IOException ex) {ex.printStackTrace();}}
}

源代码-客户端

package client;import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;public class Client extends JFrame {private JButton b1 = new JButton("发送");private JButton b2 = new JButton("清屏");// 输入框private JTextField text = new JTextField(10);// 显示连接状态private JTextField info = new JTextField(10);// 显示文本框private JTextArea area = new JTextArea(10, 25);private DataInputStream in = null;private DataOutputStream out = null;// 是否和服务器端已建立连接标识private boolean connect = false;public static void main(String[] args){Client frame = new Client();frame.setTitle("QQ-客户端");frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(600, 500);frame.setVisible(true);frame.showInfo("QQ客户端开始启动...");frame.workCycle(frame);}public Client() {// 为b1按钮添加监听事件,“发送”b1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {if (connect) {String str = text.getText();text.setText(""); // 设置为空Date date = new Date();DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");area.append(format.format(date) + '\n');area.append("我:" + str + '\n');try {out.writeBytes(str + '\n'); // 加上最后的'\n'为了在另一端显示换行} catch (IOException ex) {ex.printStackTrace();}}}});// 为b2按钮添加监听事件,“清屏”b2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {area.setText("");}});add(BorderLayout.NORTH, new JScrollPane(area));add(BorderLayout.CENTER, text);add(BorderLayout.SOUTH, info);add(BorderLayout.EAST, b1);add(BorderLayout.WEST, b2);}private void showInfo(String str) {info.setText(str);}public void workCycle(Client frame) {try {Socket socket = new Socket("localhost", 60000);frame.showInfo("连接服务器成功...");connect = true;in = new DataInputStream(socket.getInputStream());out = new DataOutputStream(socket.getOutputStream());for (;;) { // 始终和服务器端连接/*char c = in.readChar();if (c != '\n')area.append("" + c); // (String)c 这样转换竟然不行...elsearea.append("" + '\n');*/String str = in.readLine();Date date = new Date();DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");area.append(format.format(date) + '\n');area.append("server: " + str + '\n');}}catch (IOException ex) {ex.printStackTrace();}}
}






http://chatgpt.dhexx.cn/article/3iAxMt55.shtml

相关文章

局域网QQ助手,查找局域网在线QQ,支持手机版QQ

局域网QQ助手主要功能是扫描所有当前在线QQ号码 1,可以支持普通路由器,有线路由器(WIFI)等网络环境,二级路由器下的QQ号码一般情况下也可以扫到。 2,可以扫描局域网当前在线的苹果QQ,安卓QQ以及PC版的QQ,支…

局域网内QQ代理设置

在公司上网如果需要通过代理的话,登陆QQ经常出问题,登不上,或者测试连接成功但是登不上,自己试了下,如下图配置代理就可以登上了。当然情况各异,不一定都行得通。 如上图所示:网络设置&#xff…

代码生成器原理

代码生成器原理很简单,用一句话概括就是:将数据库字段转换成Java字段并输出内容。 如下图所示: 因此,首先需要做的是获取表信息以及表的字段信息,一般有两种方式,第一种:连接到数据库&#xff…

【代码生成器】代码生成器原理分析

文章目录 前言1 浅谈代码生成器1.1 概述 1.2 需求分析1.3 实现思路 2 深入FreeMarker2.1 什么是FreeMarker2.2 Freemarker的应用场景2.3 Freemarker的基本使用2.3.1 构造环境2.3.2 入门案例2.3.3 字符串模板 2.4 Freemarker模板2.4.1 概述2.4.2 数据模型2.4.3 模板的常用标签2.…

介绍几款低代码生成器,神器

原文地址: 介绍几款低代码生成器,神器 - 方包博客 - java|python|前端开发|运维|电商|ui设计 国内国外很火爆的代码生成器 1:在线搭建框架-懒猴子CG 官方网址:http://cg.lazy-monkey.com/ 懒猴子代码生成器支持Java,Vue,React,Pyt…

springboot + vue 前后端分离代码生成器,毕设好帮手

hello 大家好,最近搞了一个前后端代码生成器。只需设计好数据库,就可以自动生成前端页面包括图片上传和后端代码。下面给大家介绍一下。 项目环境:jdk8、node12、maven、mysql、vue2 技术介绍:SpringSecurity、SpringBoot、swagg…

如何编写自己的代码生成器(理论篇一)

作者简介 一个很懒很懒的程序员 如何编写自己的代码生成器 我平常开发都会用到代码生成器,本文将介绍如何制作属于自己业务的代码生成工具 代码生成器的作用 一个新的需求开发涉及到的数据库表有可能有很多张,每个都需要去写增删改查后台管理页面有很…

简单代码生成工具

代码生成 我们做项目的时候,经常会碰到写一些基础的增删改查代码,所以就写了个代码生成的工具,可根据自己的需求编写相应的代码模板。 大致思路 查询表信息,通过字段类型映射出 java 类型,然后通过模板生成 java 文件…

自制代码生成器(上)

自制代码生成器原因: •Mybatis自带的自动生成代码,不能自定义,各种命名没法改,不能生成controller、service、jsp等页面 如何写代码生成器—模板引擎velocity Velocity-1.7.jar : 模板引擎 commons的2个jar包 &#…

Mybatis 代码生成器

MBG与Example GitHub - mybatis/generator: A code generator for MyBatis. 我们在项目中使用Mybatis的时候,针对需要操作的一张表,需要创建实体类、Mapper映射器、Mapper接口,里面又有很多的字段和方法的配置,这部分的工作是非常…

Java-代码生成器的实现

文章目录 前言一、概述二、手写代码1. 简要说明2. 代码编写3. 完整代码4. 测试效果 三、项目源码 前言 最近看了一个开源的项目,jfinal-layui,然后这个项目里面有一个 代码生成器 的功能 之前虽然有用过代码生成器,但是从来没有看过相关的源…

MyBatis-Plus代码生成器(新)使用

目录 一,MyBatis-Plus基本简介。 二,特性 三,实现代码自动生成工具 3.1,准备一个初始项目,数据表,连接好数据库 3.2,导入Mybatis-Plus相关依赖 3.3,配置数据库配置文件applicat…

快速上手若依代码生成器(2022)

文章目录 前言一、启动若依框架二、使用代码生成器1 导入示例表2 使用自带的代码生成 生成zip文件2.1 Illegal mix of collations报错解决 三 把zip文件的内容粘贴到对应的模块中3.1 粘贴后台代码3.2 粘贴前台代码3.3 运行菜单sql语句 四 重新启动前端后端总结 前言 快速上手使…

若依代码生成器的使用

一、代码生成器的使用 1.新建maven模块 原则上,我们的业务代码和若依系统本身的系统代码是要做隔离的,一方面是易于之后随着若依系统升级而升级,另一方面则是纯粹的合理性考虑。 这里新建一个ruoyi-business模块作为业务代码模块,…

Java代码生成器

项目说明 本项目基于是基于 renren-generator 定制的代码生成器 文章目录 **项目说明**不同点:效果原理分析如何定制开发?更多可能存在的坑代码地址 不同点: 因为本人的公司使用的是 tkmyabtis swagger 构建 rest api,而 renren-generator…

手把手带你实现一个代码生成器

前言 不知各位看官在工作之中有没有陷入过疯狂CV代码、看着密密麻麻的类不想动手,或者把大把的时间花费在底层的情况。以笔者为例,会经常遇到以下两个问题: 隔一段时间就需要构建一个新应用,需要各种复制粘贴(缺乏定…

代码生成器 ----一个独立的代码生成器

这里我就没有过多发废话了,直接给正文。下面是代码生成器的一些简单介绍。操作简单没啥难度。 下面是生成器的地址,谢谢您的使用↓ 代码生成器点这儿。 一、基于简单的数据库属性连接 二、浏览器缓存连接历史 1、可以选择历史连接 2、可以清空所有浏…

如何自定义代码生成器(上)

1 概述 1.1 介绍 ​ 在项目开发过程中,有很多业务模块的代码是具有一定规律性的,例如controller控制器、service接口、service实现类、mapper接口、model实体类等等,这部分代码可以使用代码生成器生成,我们就可以将更多的时间放…

Java快速开发之代码生成器

1、代码生成器原理分析 观察我们之前写的代码,会发现其中也会有很多重复内容,比如: 那我们就想,如果我想做一个Book模块的开发,是不是只需要将红色部分的内容全部更换成Book即可,如: 所以我们会发现&#…

代码生成器

目录 引言 1 第一种 1.0 pom依赖 1.1 第一步:配置文件 1.2 第二步:代码生成器 1.3 执行生成 引言 代码生成器,遇到过也使用过很多了,用的时候觉得很简单,但是这个玩意不是开个新项目几乎很少碰到,所…