简易局域网聊天QQ

article/2025/9/29 1:16:10

简易局域网聊天系统–局域网QQ

服务器端

实现简易的启动停止服务器端操作,能记录基本日志:客户连接、消息传送,能查看连接客户的昵称。

启动服务器后开始监听客户端连接,创建一个新线程实现该监听操作。

// 启动新线程监听客户端
new Thread(new Runnable() {public void run() {writeLog("开始监听客户端:");listen();}
}).start();

为每一个客户端连接开启一个新线程处理通讯,包括处理输入流与输出流。

// 每监听到一个客户端连接,启动一个新线程处理该连接
new Participant(this, socket, usersList).start();

获取用户不同的行为实现不同的操作

String flag = in.readUTF(); // 获取用户操作行为
if ("validateUser".equals(flag)) { // 验证用户是否存在// ……………………
} else if ("newUser".equals(flag)) { // 新用户登录// ……………………
} else if ("message".equals(flag)) { // 用户间发送消息// ……………………
} else if ("userList".equals(flag)) { // 获取用户列表// ……………………
}

在服务器端,采用Map保存每个客户端对应的套接字:

private Map<String, Socket> usersList = new HashMap<String, Socket>();

key为客户端连接时输入的用户昵称,value为对应的套接字对象。

各客户端用户间发送消息时,通过服务器转发送该信息:

String sender = in.readUTF(); // 发送者
String receiver = in.readUTF(); // 接收者
String message = in.readUTF(); // 消息
// 添加日志
server.writeLog(sender + " 向 " + receiver + "发送消息:" + message);
// 服务器向目标转发消息,先获得要转发后的目标套接字对象
Socket socket = server.getUsersList().get(receiver);
System.out.println(out);
if (socket == null) { // 服务器已删除该客户端连接信息out.writeUTF("message");out.writeUTF("系统服务器");out.writeUTF(receiver + "已退出系统,无法再发送消息");out.flush();
} else {DataOutputStream thatOut = new DataOutputStream(socket.getOutputStream()); // 创建输出流对象if (thatOut != null) {thatOut.writeUTF("message");thatOut.writeUTF(sender);thatOut.writeUTF(message);thatOut.flush(); // 写入客户端输出流中}
}

客户端

先通过登录窗体实现服务器端连接,然后输入登录用户昵称,如果服务器端还未保存该昵称,则登录成功。登录成功后,可以直接先读取到服务器端已有登录用户的昵称,显示到列表中。双击好友列表中的任一项打开聊天对话框,然后双方可以开始聊天。

创建到服务器的套接字对象:

// 创建套接字对象
socket = new Socket(serverIp.getText().trim(), Integer.parseInt(port.getText().trim()));

连接的服务器与端口从窗体文本框中获取到。

登录成功后,将昵称发送到服务器保存:

out.writeUTF("newUser");
out.writeUTF(nickname);
out.flush();

刷新好友列表:

// 读取流中信息
String flag = in.readUTF();
if ("userList".equals(flag)) { // 好友列表String[] userList = in.readUTF().split("::::"); // 获取好友列表,使用标记分隔// 创建好友列表模型DefaultListModel list = new DefaultListModel();for (int i = 0; i < userList.length; i++) {list.addElement(userList[i]);}friends.setModel(list); // 设置模型friends.validate(); // 重绘
}

发送消息给某个好友:

out.writeUTF("message");
out.writeUTF(sender);
out.writeUTF(recipient);
out.writeUTF(textArea.getText());
out.flush();

开启新线程读取服务器转发的好友信息:

String flag = in.readUTF();
if ("message".equals(flag)) {String sender = in.readUTF();String msg = in.readUTF();String message = sender + " 对你说:" + msg + "\n";jTextArea.append(message);
}

运行效果图:

服务器效果:

服务器运行效果图

客户端效果:

登录界面

登录成功后主界面

聊天界面

聊天界面2

源代码:http://download.csdn.net/download/zhliro/8657263


http://chatgpt.dhexx.cn/article/LG7HO9EU.shtml

相关文章

Win 7 SSDP 组播 引发 局域网 QQ掉线 分析

很久没有写博客了&#xff0c;自从四月份以来找了一份开发的工作开始从事PHP&#xff0c;symfony 网站开发&#xff0c;突然发现好像也没有什么东西可以分享了&#xff0c;所以博客也写的少了。 言归正传&#xff0c;最近学校常常有人抱怨QQ掉线&#xff0c;而且据说有严重的趋…

kali局域网扫描ip_kali 扫描局域网的QQ

扫描电脑端 方法一:抓包方式 相对于电脑端来说,很简单。因为电脑的QQ使用的是OICQ协议。我们只需要抓包搜索OICQ协议即可。 然后查找协议 OICQ - IM software, popular in China展开后即可看到QQ号码 方法二:利用软件 下载软件QQSNIFFER运行扫描

利用SWT做Java版局域网QQ(一)——基于UDP协议

首先自我介绍下,本人非专职IT人员、纯粹是IT爱好者,也并非计算机专业毕业的,所用的Java知识也全凭空闲时间学习的,所以在很多地方代码不够精炼,也只是能实现 一些功能吧,当然也参考了一些前辈的文档等。写此篇博客也纯粹是把自己学到的写写笔记而已。好了废话不多说,开始…

C#局域网聊天程序

【例1】下面演示如何使用C#制作一个局域网聊天程序&#xff0c;程序开发步骤如下&#xff1a; (1)新建一个Windows应用程序&#xff0c;并命名为11&#xff0c;这时程序自动创建了一个解决方案&#xff0c;名称为11。 (2)将默认创建的Windows 窗体删除&#xff0c;然后在名称为…

局域网攻击

arp攻击 必要内容 安装arpspoof文件 apt-get install dsniff1.检查以及获取网段 即查看局域网存活主机 fping -asg 192.168.1.1/24 或者-->nmap -sP ip 扫描常用的端口-->nmap -F -sT -v nmap.org注意点&#xff1a; ①攻击者的IP和被攻击者的IP需要在同一个网段中&a…

仿QQ局域网聊天软件

1 目的 想复习一下TCP/IP协议,再结合一下以前学的Qt的知识&#xff0c;加上前段时间学的MySQL数据库操作&#xff0c;所以写了个"仿QQ局域网聊天软件"小项目&#xff0c;只实现了一部分功能&#xff0c;还没写完&#xff0c;后面的功能后面慢慢加&#xff0c;毕竟一口…

同一局域网内怎样获取新来美眉QQ号码!((*^__^*) 嘻嘻……)

看到这个标题&#xff0c;想必有些人已经按耐不住内心的激动&#xff0c;迫切想知道如何在局域网内获取新来美眉的QQ号码的。当然&#xff0c;如果你是程序猿妹子&#xff0c;公司新来的帅哥你也可以大胆的用这种方法获取哦。当然&#xff0c;有的人也许会说获取QQ号有什么用啊…

C#即时通讯(局域网QQ)

C#即时通讯&#xff08;局域网QQ&#xff09; 一&#xff1a;服务器端&#xff1a; private void Form1_Load(object sender, EventArgs e){Control.CheckForIllegalCrossThreadCalls false;}private void button1_Click(object sender, EventArgs e){//ip地址IPAddress ip …

Java实现最简单局域网QQ

Java实现局域网QQ&#xff0c;这是最简单的实现了。整个系统只有一个服务器端和一个客户端&#xff0c;成功建立连接后&#xff0c;服务器端发消息给客户端&#xff0c;客户端发消息给服务器端。最上边的文本框是显示接收到的消息的&#xff0c;左边清屏按钮是把接收区域清空的…

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

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

局域网内QQ代理设置

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

代码生成器原理

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

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

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

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

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

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

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

简单代码生成工具

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

自制代码生成器(上)

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

Mybatis 代码生成器

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

Java-代码生成器的实现

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