Java实现最简单局域网QQ

        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://xiahunao.cn/news/143713.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

QQ空间利用代码自动删除说说

你有多久没有登录QQ空间了?很多人只留下QQ,空间的应用也删除了。 QQ空间从2005年发展到现在,自从微信朋友圈的横空出世,QQ空间从此失宠了。 笔者以前还是挺喜欢QQ空间的,很多人都会花钱把空间装扮的漂漂亮亮&#xf…

swiper组件轮播图片右边空白问题

swiper组件轮播图片右边空白问题 刚开始使用iphone5预览正常,切换成iphone6 Plus之后,发现右边会有空白。所以尝试解决了。 一、原始代码与效果 官方swiper组件 https://developers.weixin.qq.com/miniprogram/dev/component/swiper.html 示例代码 &…

excel打开csv后空白解决方法

excel打开csv后空白解决方法 觉得有用的话,欢迎一起讨论相互学习~ 转载自 https://blog.csdn.net/qq_16775293/article/details/100990018 文章目录 问题描述 解决方法 打开注册表修改注册表信息 问题描述 我的Excel2013打开后没有任何报错,直接显示一片空白&a…

vs登录界面空白_金蝶KIS云专业版登录使用时一片空白

案例版本:金蝶KIS云专业版 操作系统:Windows 系列 问题描述:客户端登录一片空白 显示界面: 情况1:如果是服务器端打开一片空白 解决办法:关闭登录窗,双击运行电脑桌面【金蝶KIS云专业版-系统管理…

PHP QQ网页三方登录

一、在QQ互联上注册成为开发者 注册指南地址: http://wiki.connect.qq.com/%E6%88%90%E4%B8%BA%E5%BC%80%E5%8F%91%E8%80%85 二、创建应用,获取APP ID和APP Key 创建应用指南地址:http://wiki.connect.qq.com/__trashed-2 1、进入QQ互联后台…

卡西欧计算机亮度,卡西欧手表灯光怎么调 卡西欧手表灯光亮度可以调吗

卡西欧手表的照明灯光其实还蛮方便的,在一些比较黑的地方,用起来是很好用的,不过很多人刚拿到手可能还不太会用,下面一起来看看卡西欧手表灯光怎么调吧。 卡西欧手表灯光怎么调 卡西欧手表的灯光点亮时间可以通过左上角的按键来进…

【工具】我的键盘(机械键盘)快捷键设置

文章目录 1. 我的键盘自定义的设置:1.1 最近常用的快捷键设置 2. 我的键盘的说明书截图如下(共三页):3. POKER3R 的按键编程截图4. 链接5. 有用请点赞,谢谢!1. 点赞,积分12. 评论,积…

机械键盘轴的小知识详解

近年来无论是玩游戏还是办公,现在越来越多的人选择使用机械键盘,特别是对于游戏玩家来说,机械键盘已经成为标配。对于不太了解机械键盘的朋友来说,可能第一次听说机械键盘轴这个东西。那么,机械键盘轴的区别是什么?如…

Java实现复制文件(文件、文件夹)

Java复制文件主要是File工具类中listFiles()方法先列出文件夹中的文件, 然后使用BufferedInputStream缓冲输入流接收要复制的文件, 再用BufferedOutputStream缓冲输出流的write()方法写入文件 先新建一个复制文件类, 这边使用递归的方法来复制文件 复制文件夹: /*** 复制文件夹…

系统封装制作

工具网址: 镜像下载: Windows 10 22H2 - MSDN - 山己几子木 (sjjzm.com)pe工具:【新提醒】优启通 v3.7.2022.0910(2022.10.14 发布)_IT天空原创软件_IT天空 (itsk.com)万能驱动:万能驱动 v7.22.0912.2&…

最新WIN10系统封装教程2019系列(三)——必要的系统调整

本教程共有8个系列 1. 定制母盘2. 虚拟机与母盘安装 3. 必要的系统调整 4. 手动优化5. 使用工具优化与清理6. 常规软件安装7. 封装8. 测试效果 母盘安装后我们需要进行必要的系统调整,以便让接下来的封装工作开展的更顺畅。比如文件交换,需要提前把封…

Windows镜像封装

一、首先设置网卡属性为DHCP 操作环境 通过云服务器或者外部镜像文件创建私有镜像时,如果云服务器或镜像文件所在虚拟机的网络配置是静态IP地址时,您需要修改网卡属性为DHCP,以使私有镜像发放的新云服务器可以动态获取IP地址。 说明&#x…

独自封装windows 10系统详细教程(二)

目录 作者语录: 三、调整系统设置 1、切换管理员账号 2、添加英文输入法 3、关闭windows自动更新 4、取消任务视图的历史记录 四、个性化设置(选择) 1、调整视觉效果 2、windows桌面壁纸/登录壁纸 3、OEM信息 作者语录: 这…

封装自己专属的真正的纯净版Windows系统过程记录(4)——进行封装

文章目录 工具准备封装第一阶段ES5S封装第二阶段前的调整ES5S封装第二阶段设置提前测试部署并进入桌面检查经过以上检查,没有问题,最终打包保存系统镜像文件恢复到最后一次快照,然后进入PE 按照下图步骤将C盘目标系统盘备份成WIM镜像文件即可…

windows系统封装

工具 vmware workstation15优启通 v3.6Easy Sysprep v5(ES5) 首先新建一个虚拟机,修改下虚拟机硬件配置,去掉无用硬件,添加一个光驱 光驱放入镜像,光驱1放入优启通PE的镜像,光驱2放入win10系…

2 files found with path ‘lib/arm64-v8a/libwechatbacktrace.so‘ from inputs

2 files found with path lib/arm64-v8a/libwechatbacktrace.so from inputs 解决方案,在app module的build.gradle里面的 android { } 块里面添加: packagingOptions {exclude lib/arm64-v8a/libwechatbacktrace.so} 如果有多个,就再增加行…

adc去质器什么意思_LOL:“ADC去质器”成为了赏金猎人的神器

都知道最近LOL更新了一次大的版本,不光是上线了一个全新的自带抢人头BUFF的辅助,还上线了很多备受期待的新装备。而其中“岚切”这件装备,在未上线之前就一直备受玩家的关注,因为从测试服曝光数据以来,这件装备似乎就成…

ADC工作原理及应用

逐次逼近型 离散化 自然界的模型信号一般都是连续的

adc去质器什么意思_LOL:这三个英雄就是“ADC去质器”,尤其第3个

搞笑的玩家无处不在,搞笑的游戏也是层出不穷,沙漠雕哥为大家寻找游戏中的搞笑玩家行为,以及搞笑的游戏作品。 英雄联盟在中国发展了8年,出了很多新鲜的玩法,也推出了很多新鲜的英雄,在刺客这方面也出了很多…

adc去质器什么意思_ADC后期伤害爆炸?这几个英雄轻松制裁,ADC去质器了解一下...

英雄联盟经过了多个版本的修改,现在版本可谓是刺客英雄的天下,对ADC这种前期弱势的英雄可不太友好。虽然A DC前期比较弱势,但后期的ADC伤害非常爆炸,团战更是威胁最大的英雄。后期ADC伤害爆炸,选择几个英雄能够让ADC瞬…