一对一聊天程序

package untitled1.src;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;public class MyServer extends JFrame{private ServerSocket server; // 服务器套接字private Socket socket; // 客户端套接字private BufferedReader reader;private PrintWriter writer;// 根据套接字字节流创建的字符输出流// = new PrintWriter("D:\\word.txt")private JTextArea area = new JTextArea();// 展示信息的文本域private JTextField text = new JTextField(); // 发送信息的文本框void start() {// 启动服务器try {server = new ServerSocket(8998); // 服务器启用8998端口area.append("服务器套接字已经创建成功\n");while (true) {area.append("等待客户端的连接\n");socket = server.accept(); // 服务器监听客户端连接// 根据套接字字节流创建字符输入流reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new PrintWriter(socket.getOutputStream(), true);while (true) {// 循环接受信息String message = reader.readLine();// 读取一行文本if ("exit".equals(message)) {// 如果客户端发来的内容为“exit”System.out.println("客户端退出");break;// 停止接受信息}area.append("客户端:" + message + "\n");}reader.close(); // 关闭流socket.close(); // 关闭套接字}} catch (IOException e) {e.printStackTrace();}}public MyServer() throws FileNotFoundException {setTitle("向客户端送数据");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container c = getContentPane(); // 主容器JScrollPane scrollPane = new JScrollPane(area);// 滚动面板getContentPane().add(scrollPane, BorderLayout.CENTER);c.add(text, "South"); // 将文本框放在窗体的下部text.addActionListener(new ActionListener() {// 文本框触发回车事件public void actionPerformed(ActionEvent e) {if (text.getText() != null){writer.println(text.getText().trim()); // 将文本框中的信息写入流}area.append(text.getText() + '\n'); // 将文本框中的信息显示在文本域中text.setText(""); // 将文本框清空}});}public static void main(String[] args) throws FileNotFoundException {MyServer tcp = new MyServer();tcp.setSize(500, 300); // 窗体大小tcp.setVisible(true); // 显示窗体tcp.start(); // 启动服务器}
}

 

package untitled1.src;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import javax.swing.*;public class MyClient extends JFrame {private BufferedReader reader;private PrintWriter writer;// 根据套接字字节流创建的字符输出流Socket socket; // 客户端套接字private JTextArea area = new JTextArea();// 展示信息的文本域private JTextField text = new JTextField(); // 发送信息的文本框public MyClient() {setTitle("向服务器送数据");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container c = getContentPane(); // 主容器JScrollPane scrollPane = new JScrollPane(area);// 滚动面板getContentPane().add(scrollPane, BorderLayout.CENTER);c.add(text, "South"); // 将文本框放在窗体的下部text.addActionListener(new ActionListener() {// 文本框触发回车事件public void actionPerformed(ActionEvent e) {writer.println(text.getText().trim()); // 将文本框中的信息写入流area.append(text.getText() + '\n'); // 将文本框中的信息显示在文本域中text.setText(""); // 将文本框清空}});}private void connect() { // 连接服务器方法area.append("尝试连接\n"); // 文本域中提示信息try {socket = new Socket("127.0.0.1", 8998); // 连接本地计算机的8998端口writer = new PrintWriter(socket.getOutputStream(), true);reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));area.append("完成连接\n");while (true) {// 循环接受信息String message = reader.readLine();// 读取一行文本if ("exit".equals(message)) {// 如果服务端发来的内容为“exit”System.out.println("服务端退出");break;// 停止接受信息}area.append("服务器:" + message + "\n");}reader.close(); // 关闭流socket.close(); // 关闭套接字} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {MyClient clien = new MyClient();clien.setSize(500, 300); // 窗体大小clien.setVisible(true); // 显示窗体clien.connect(); // 连接服务器}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/213441.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

22、pytest多个参数化的组合

官方实例 # content of test_multi_parametrie.py import pytestpytest.mark.parametrize("x",[0,1]) pytest.mark.parametrize("y",[2,3]) def test_foo(x,y):print("{}-{}".format(x,y))pass解读与实操 要获得多个参数化参数的所有组合&…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中,有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块,但它的安装可能会因为各种原因而失败,导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

jsp在线辅助教育系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 在线辅助教育系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

概率密度函数(PDF)正态分布

概率密度函数(PDF)是一个描述连续随机变量取特定值的相对可能性的函数。对于正态分布的情况,其PDF有一个特定的形式,这个形式中包括了一个常数乘以一个指数函数,它假设误差项服从均值为0的正态分布: p ( …

【数据结构】——队列实现二叉树的功能

前言:二叉树的实现方式多种多样,有数组实现满二叉树,有链表实现完全二叉树,今天我们就用队列来实现二叉树。 创建二叉树: typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

java8 常用code

文章目录 前言一、lambda1. 排序1.1 按照对象属性排序:1.2 字符串List排序:1.3 数据库排序jpa 2. 聚合2.1 基本聚合(返回对象list)2.2 多字段组合聚合(直接返回对象list数量) 二、基础语法2.1 List2.1.1 数…

Java对象转Map

在和外部系统对接时&#xff0c;对方系统提供的SDK方法入参全是Map&#xff0c;没办法&#xff0c;只能想办法把对象转成Map。这里&#xff0c;借助了hutool的工具类&#xff0c;可以方便的通过反射获取对象的属性。引入hutool的maven配置&#xff1a; <dependency><g…

Flink 使用场景

Apache Flink 功能强大&#xff0c;支持开发和运行多种不同种类的应用程序。它的主要特性包括&#xff1a;批流一体化、精密的状态管理、事件时间支持以及精确一次的状态一致性保障等。Flink 不仅可以运行在包括 YARN、 Mesos、K8s 在内的多种资源管理框架上&#xff0c;还支持…

智慧社区前景无限,科技引领未来发展

社区是城镇化发展的标志&#xff0c;作为人类现代社会的生活的基本圈子&#xff0c;是人类生活离不开的地方&#xff0c;社区人口密度大、车辆多&#xff0c;管理无序&#xff0c;社区的膨胀式发展多多少少带来一定的管理上的缺失。社区作为智慧城市建设的重要一环&#xff0c;…

时间复杂度为 O(n^2) 的排序算法 | 京东物流技术团队

对于小规模数据&#xff0c;我们可以选用时间复杂度为 O(n2) 的排序算法。因为时间复杂度并不代表实际代码的执行时间&#xff0c;它省去了低阶、系数和常数&#xff0c;仅代表的增长趋势&#xff0c;所以在小规模数据情况下&#xff0c; O(n2) 的排序算法可能会比 O(nlogn) 的…

uniapp实战 —— 竖排多级分类展示

效果预览 完整范例代码 页面 src\pages\category\category.vue <script setup lang"ts"> import { getCategoryTopAPI } from /apis/category import type { CategoryTopItem } from /types/category import { onLoad } from dcloudio/uni-app import { compu…

【链表Linked List】力扣-114 二叉树展开为链表

目录 题目描述 解题过程 官方题解 题目描述 给你二叉树的根结点 root &#xff0c;请你将它展开为一个单链表&#xff1a; 展开后的单链表应该同样使用 TreeNode &#xff0c;其中 right 子指针指向链表中下一个结点&#xff0c;而左子指针始终为 null 。展开后的单链表应…

【Vulnhub 靶场】【Momentum: 2】【简单】【20210628】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/momentum-2,702/ 靶场下载&#xff1a;https://download.vulnhub.com/momentum/Momentum2.ova 靶场难度&#xff1a;简单 发布日期&#xff1a;2021年06月28日 文件大小&#xff1a;698 MB 靶场作者&#xff1…

在OpenCV基于深度学习的超分辨率模型实践

1. 引言 OpenCV是一个开源的计算机视觉库&#xff0c;拥有大量优秀的算法。基于最新的合并&#xff0c;OpenCV包含一个易于使用的接口&#xff0c;主要用于实现基于深度学习方法的超分辨率&#xff08;SR&#xff09;。该接口包含预先训练的模型&#xff0c;这些模型可以非常容…

如何为 3D 模型制作纹理的最佳方法

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 您可以通过不同的方式为 3D 模型创建 3D 纹理。下面我们将介绍为 3D …

小调查:你申请的流量卡,快递员派件时让你激活并充话费了吗?

说到这个问题&#xff0c;就要给大家普及一下流量卡的激活方式了&#xff0c;并不是所有的流量卡快递都需要快递激活并充话费&#xff0c;只有在套餐详情种明确标注快递激活的流量卡才会有这个要求&#xff0c;自主激活的流量卡则不需要的。 如图所示&#xff1a; 接下来&#…

【征稿倒计时十天】第三届高性能计算与通信工程国际学术会议(HPCCE 2023)

【有ISSN、ISBN号&#xff01;&#xff01;往届均已完成EI检索】 第三届高性能计算与通信工程国际学术会议(HPCCE 2023) 2023 3rd International Conference on High Performance Computing and Communication Engineering (HPCCE 2023) 2023年12月22-24日 | 中国哈尔滨 第三…

听GPT 讲Rust源代码--src/tools(9)

File: rust/src/tools/rust-analyzer/crates/ide-assists/src/handlers/apply_demorgan.rs 在Rust源代码中&#xff0c;apply_demorgan.rs文件位于rust-analyzer工具的ide-assists库中&#xff0c;其作用是实现一个辅助函数&#xff0c;用于在代码中应用De Morgan定律的变换。 …

空间运算设备-Apple Vision Pro

苹果以其在科技领域的创新而闻名&#xff0c;他们致力于推动技术的边界&#xff0c;这在他们的产品中表现得非常明显。他们尝试开发一项的新型突破性显示技术。在 2023 年 6 月 5 日官网宣布将发布 Apple Vision Pro 头戴空间设备&#xff0c;我们一起来了解一下 Apple Vision …

MySQL_1. mysql数据库介绍

shell脚本差不多快完结了接下来会为大家更新MySQL系列的相关的基础知识笔记&#xff0c;希望对大家有所帮助&#xff0c;好废话不多说&#xff0c;接下来开始正题&#xff01; 1.mysql数据库介绍 mysql 是一款安全、跨平台、高效的&#xff0c;并与 PHP、Java 等主流编程语言…