Java程序设计:Java 网络聊天室客户端

news2024/9/24 3:28:26

相关网络编程前两篇文章:Java程序设计:Java网络编程实验

服务端部分见上一篇文章:Java程序设计:Java网络聊天室服务端

目录

1 实验名称

2 实验目的

3 实验源代码

4 实验运行结果图

5 总结


1 实验名称

       Java 网络聊天室客户端

2 实验目的

       继续熟练掌握在eclipse中调试代码

       掌握Java面向对象思想掌握多线程在该项目中的使用

       掌握GUI编程在该项目中的使用

       掌握IO在该项目中的使用

       掌握多线程在该项目中的使用

       掌握Java 网络编程在该项目中的使用

       掌握TCP协议和Socket套接字编程在该项目中的使用

3 实验源代码

package Text01.NetworkProgrammingText;

import java.io.*;
import java.net.*;
import java.util.Scanner;

public class Client {
    private String hostname; // 服务器地址
    private int port; // 服务器端口
    private String clientName; // 客户端名称

    public Client(String hostname, int port, String clientName) {
        this.hostname = hostname;
        this.port = port;
        this.clientName = clientName;
    }

    public void start() {
        try {
            Socket socket = new Socket(hostname, port); // 连接服务器
            System.out.println("连接服务器成功!");

            BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 输入流,用于读取服务器发送的消息
            BufferedWriter output = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); // 输出流,用于向服务器发送消息

            output.write(clientName + "\n"); // 输入客户端名称
            output.flush();

            Thread readThread = new Thread(new Runnable() { // 创建新线程用于读取服务器发送的消息
                @Override
                public void run() {
                    try {
                        String message;
                        while ((message = input.readLine()) != null) { // 循环读取服务器发送的消息并在控制台上显示
                            System.out.println(message);
                        }
                    } catch (IOException e) {
                        System.out.println("读取服务器消息失败: " + e.getMessage());
                    }
                }
            });
            readThread.start(); // 启动新线程

            BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // 控制台输入流
            String message = "";
            while (!message.equals("bye")) { // 循环读取用户控制台输入并发送给服务器
                message = reader.readLine();
                output.write(clientName + ": " + message + "\n");
                output.flush();
            }

            readThread.interrupt(); // 中断新线程
            input.close(); // 关闭输入流、输出流和socket连接
            output.close();
            socket.close();
        } catch (IOException e) {
            System.out.println("连接服务器失败: " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        String hostname = "127.0.0.1"; // 获取服务器地址
        int port = Integer.parseInt("8080"); // 获取服务器端口号
        String clientName = "8000"; // 获取客户端名称
        Client client = new Client(hostname, port, clientName); // 创建客户端对象
        client.start(); // 启动客户端
    }
}

4 实验运行结果图

5 总结

       此次实验通过创建服务器、处理客户端请求、多线程服务器、客户端编程等一系列步骤完成了这次任务。此次实验中,使用ServerSocket类创建了一个简单的服务器,并处理了客户端连接请求;接着使用Socket类处理了客户端发送的消息,并向客户端返回相应消息;然后使用多线程服务器来处理多个客户端的连接请求,实现了并发处理功能;最终也实现了一个简单的客户端程序,并与服务器进行通信。  

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

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

相关文章

纳米软件的电源模块测试系统有什么功能和优势?

纳米软件电源模块自动化测试系统主要实现针对单路进4路出和单路进2路出的非隔离DCDC电源模块进行测试。本次方案包含对以下15个测试项目的自动化测试,分别为输入电压范围VIN的最大值最小值、输出电压范围VOUT的最大值最小值、输出纹波VOPP、电压调整率SV、负载调整率…

基于SpringBoot+Vue的学院商铺管理系统(带1w+文档)

基于SpringBootVue的学院商铺管理系统(带1w文档) 基于SpringBootVue的学院商铺管理系统(带1w文档) 互联网概念的产生到如今的蓬勃发展,用了短短的几十年时间就风靡全球,使得全球各个行业都进行了互联网的改造升级,标志着互联网浪潮的来临。在…

[VBA]使用VBA在Excel中 操作 形状shape 对象

excel已关闭地图插件,对于想做 地图可视化 的,用形状来操作是一种办法,就是要自行找到合适的 地图形状,修改形状颜色等就可以用于 可视化展示不同省市销量、人口等数据。 引言 在Excel中,通过VBA(Visual Basic for Applications)可以极大地增强数据可视化和报告自动化…

Spring Cache在业务系统中最佳实践教程详解及实现原理

1.概述 接着之前总结的如何保证MySQL与Redis数据同步一致性一文中提到在业务代码中一般采用旁路缓存策略方式实现同步,Spring Cache 就是 Spring Framework 基于该策略方式提供的一种缓存抽象,可以帮助开发者简化缓存的使用过程。它支持多种缓存实现&am…

【STM32】DMA数据转运(存储器到存储器)

本篇博客重点在于标准库函数的理解与使用,搭建一个框架便于快速开发 目录 DMA简介 DMA时钟使能 DMA初始化 转运起始和终止的地址 转运方向 数据宽度 传输次数 转运触发方式 转运模式 通道优先级 开启DMA通道 DMA初始化框架 更改转运次数 DMA应用实例-…

Google Mock 和 Google Test编写单元测试入门(环境配置、简单执行)

文章目录 环境的配置方法1:从源代码构建第一步:克隆库的源代码第二步:构建库 方法 2:使用 CMake 的 FetchContent示例 CMakeLists.txt 项目的创建项目结构CMakeLists.txt (根目录)main.cpp (示例程序)tests/CMakeLists.txt (测试部…

更换CentOS中docker的镜像源

如果docker pull镜像出现: error pulling image configuration: download failed after attempts6: dial tcp 173.236.182.137:443: i/o timeout 如果是阿里云,我们进入阿里云官网: 阿里云开发者社区-云计算社区-阿里云 然后点击产品&#…

医疗器械重大网络安全更新是什么?有何价值?

医疗器械重大网络安全更新是指那些影响到医疗器械的安全性或有效性的网络安全更新。这类更新通常涉及重大网络安全功能的变更,旨在提升医疗器械在网络环境中的安全性和稳定性。 一、医疗器械重大网络安全更新的价值 保障患者安全:医疗器械在处理患者数据…

开发学习日记1

用这个系列博客记录下学习开发的一些小收获 git的使用: 说来惭愧,学到了大二,git的使用还是一团糟,记录一下如何使用git进行团队合作开发 当要加入其他人的项目时首先你要创建自己的分支(克隆一下其他分支&#xff…

处理Pandas中的JSON数据:从字符串到结构化分析

在数据科学领域,JSON作为一种灵活的数据交换格式,被广泛应用于存储和传输数据。然而,JSON数据的非结构化特性在进行数据分析时可能会带来一些挑战。本文将指导读者如何使用Pandas库将DataFrame中的JSON字符串列转换为结构化的表格数据&#x…

mac 容器化 安装docker es | redis

brew install docker 安装桌面版 docker-destop 在桌面端搜索对应的es 版本 docker 安装elasticsearch 先确保java 已安装 oracle-jdk17 LTS 版本 报错:ERROR: [1] bootstrap checks failed. You must address the points described in the following [1] li…

【esp32】secure boot (安全启动)配置

简介 Secure Boot,即安全启动,是一种确保在一个平台上运行的程序的完整性的过程或机制。它的主要作用是在固件和应用程序之间建立一种信任关系,从而保护操作系统免受恶意攻击。 工作原理 签名验证:Secure Boot使用公钥/私钥对来…

【0304】psql 执行“VACUUM FULL”命令的背后实现过程

1. 概述 在前面讲解Postgres内核中解析器相关(【0297】Postgres内核之 INSERT INTO 原始解析树 转 Query 树 (1))内容时,曾提到过,Postgres内核大致将用户下发的SQL语句分为三大类,这里的VACUUM FULL属于CMD_UTILITY; 因此直接调用utility.c(实用程序)中的对应函数。…

javaEE(2)

一. 过滤器 作用:拦截web服务器向后端发送的数据,使请求地址在到达servlet之前进入到指定的过滤器中,可以对数据进行一些统一的处理,比如设置编码,权限控制等 使用:创建一个类实现Filter接口,并实现里面的doFilter()方法,过滤器要做的作用主要写在doFilter方法中 public clas…

实训日记day24

python基础 环境部署 [root2 ~]# yum list installed|grep python python-libs.x86_64 2.7.5-68.el7 [root2 ~]# yum -y install epel-release #必须要有epel库 [root2 ~]# yum update #更新yum [root2 ~]# yum -y install net-tools [root2 ~]…

Spring Boot 多种方式更改上下文路径

1. spring boot上下文路径概述 默认情况下,Spring Boot 在根上下文路径(“/”)上提供内容。 尽管通常最好采用约定而不是配置,但有时我们确实希望拥有自定义路径。 在此快速教程中,我们将介绍配置它的不同方法。 2…

Gitlab-CI

官网 ## gitlab-ci 完整语法 https://docs.gitlab.cn/jh/ci/yaml/index.html 原理 流程图 说明 GitLab Runner 是 GitLab CI/CD 的一个组件,用于运行构建、测试和部署作业。它是一个开源项目,允许您在专用、共享或云计算资源上执行作业。 GitLab Run…

保姆级教程,一文了解LVS

目录 一.什么是LVS tips: 二.优点(为什么要用LVS?) 三.作用 四.程序组成 五.LVS 负载均衡集群的类型 六.分布式内容 六.一.分布式存储 六.二.分布式计算 六.三.分布式常见应用 tips: 七.LVS 涉及相关的术语 八.LVS 负…

轻舟智问大语言模型算法分析报告

一、算法全周期行为分析 1. 算法安全 信息内容安全:通过输入输出内容风控处理,确保生成的内容不涉及违法或不当信息。 信息源安全:模型支持用户挂载知识内容进行增强,确保使用高质量的知识来源。 2. 算法监测 信息安全监测&#x…

day23(mysql主从脚本与mysql详细语句介绍)

一、mysql主从脚本 在同步时,对删除和修改都比较慎重(监控同步时) mysql主从搭建 前提软件libaio,rsync 1.主 2.从 3.同步 4.测试 注意:先执行从服务器的脚本,再执行主服务器脚本 master-mysql配置…