Java 之网络编程小案例

1. 多发多收

描述: 编写一个简单的聊天程序,客户端可以向服务器发送多条消息,服务器可以接收所有消息并回复。

代码示例:

服务器端 (Server.java):

import java.io.*;
import java.net.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Server {public static void main(String[] args) throws IOException {// 创建 ServerSocket 对象,监听指定端口ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器启动,监听端口 8080");// 创建线程池,处理多个客户端连接ExecutorService executor = Executors.newFixedThreadPool(10);while (true) {// 阻塞等待客户端连接Socket socket = serverSocket.accept();System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());// 创建线程处理客户端连接executor.execute(new ClientHandler(socket));}}// 处理客户端连接的线程类static class ClientHandler implements Runnable {private Socket socket;public ClientHandler(Socket socket) {this.socket = socket;}@Overridepublic void run() {try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {String message;while ((message = in.readLine()) != null) {System.out.println("收到客户端消息: " + message);out.println("服务器回复: " + message);}} catch (IOException e) {e.printStackTrace();}}}
}

客户端 (Client.java):

import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) throws IOException {// 创建 Socket 对象,连接服务器Socket socket = new Socket("127.0.0.1", 8080);// 获取输入流和输出流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);// 发送多条消息for (int i = 1; i <= 5; i++) {out.println("客户端消息 " + i);System.out.println("发送消息: " + "客户端消息 " + i);// 接收服务器回复String response = in.readLine();System.out.println("接收回复: " + response);}// 关闭连接socket.close();}
}

运行步骤:

  1. 运行 Server.java,启动服务器。

  2. 运行 Client.java,启动客户端。

  3. 客户端会发送 5 条消息,服务器会逐条接收并回复。

2. 接收并回复

描述: 编写一个程序,服务器接收客户端发送的字符串,并将其反转后回复给客户端。

代码示例:

服务器端 (Server.java):

import java.io.*;
import java.net.*;public class Server {public static void main(String[] args) throws IOException {// 创建 ServerSocket 对象,监听指定端口ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器启动,监听端口 8080");while (true) {// 阻塞等待客户端连接Socket socket = serverSocket.accept();System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());// 获取输入流和输出流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);// 接收客户端发送的消息String message = in.readLine();System.out.println("收到客户端消息: " + message);// 反转消息String reversedMessage = new StringBuilder(message).reverse().toString();// 将反转后的消息发送回客户端out.println(reversedMessage);System.out.println("发送回复: " + reversedMessage);// 关闭连接socket.close();}}
}

客户端 (Client.java):

import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) throws IOException {// 创建 Socket 对象,连接服务器Socket socket = new Socket("127.0.0.1", 8080);// 获取输入流和输出流BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));PrintWriter out = new PrintWriter(socket.getOutputStream(), true);// 发送消息out.println("hello world");System.out.println("发送消息: hello world");// 接收服务器回复String response = in.readLine();System.out.println("接收回复: " + response);// 关闭连接socket.close();}
}

运行步骤:

  1. 运行 Server.java,启动服务器。

  2. 运行 Client.java,启动客户端。

  3. 客户端会发送 "hello world",服务器会将它反转为 "dlrow olleh" 并回复给客户端。

3. 上传文件

描述: 编写一个程序,客户端上传文件到服务器,服务器保存文件到指定目录。

代码示例:

服务器端 (Server.java):

import java.io.*;
import java.net.*;public class Server {public static void main(String[] args) throws IOException {// 创建 ServerSocket 对象,监听指定端口ServerSocket serverSocket = new ServerSocket(8080);System.out.println("服务器启动,监听端口 8080");while (true) {// 阻塞等待客户端连接Socket socket = serverSocket.accept();System.out.println("客户端连接成功: " + socket.getInetAddress().getHostAddress());// 获取输入流和输出流InputStream in = socket.getInputStream();OutputStream out = socket.getOutputStream();// 接收文件名BufferedReader reader = new BufferedReader(new InputStreamReader(in));String fileName = reader.readLine();System.out.println("接收文件名: " + fileName);// 创建文件输出流File file = new File("upload/" + fileName); // 文件保存到 upload 目录FileOutputStream fileOutputStream = new FileOutputStream(file);// 接收文件内容byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = in.read(buffer)) != -1) {fileOutputStream.write(buffer, 0, bytesRead);}// 发送成功信息out.write("文件上传成功".getBytes());System.out.println("文件上传成功: " + fileName);// 关闭流和连接fileOutputStream.close();in.close();out.close();socket.close();}}
}

客户端 (Client.java):

import java.io.*;
import java.net.*;public class Client {public static void main(String[] args) throws IOException {// 创建 Socket 对象,连接服务器Socket socket = new Socket("127.0.0.1", 8080);// 获取输入流和输出流InputStream in = socket.getInputStream();OutputStream out = socket.getOutputStream();// 上传文件File file = new File("test.txt"); // 上传 test.txt 文件String fileName = file.getName();// 发送文件名PrintWriter writer = new PrintWriter(out, true);writer.println(fileName);// 发送文件内容FileInputStream fileInputStream = new FileInputStream(file);byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fileInputStream.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}// 接收服务器回复byte[] response = new byte[1024];in.read(response);System.out.println("服务器回复: " + new String(response));// 关闭流和连接fileInputStream.close();in.close();out.close();socket.close();}
}

运行步骤:

  1. 确保服务器程序中创建了名为 "upload" 的目录。

  2. 运行 Server.java,启动服务器。

  3. 运行 Client.java,启动客户端。

  4. 客户端会将 "test.txt" 文件上传到服务器,服务器会将文件保存到 "upload" 目录下。

注意:

  • 以上案例仅为简单的示例,实际应用中还需要考虑更多细节,例如错误处理、线程安全等。

  • 可以根据自己的需求进行修改和扩展,例如增加文件大小限制、添加进度条等功能。

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

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

相关文章

解决 Torch not compiled with CUDA enabled 问题 | MiniCPM3-4B 【应用开发笔记】

最近在研究测试MiniCPM3-4B&#xff0c;这里记录一下遇到的cuda和torch版本问题 在调试和运行MiniCPM3-4B过程中如果出现找不到某个包&#xff0c;就用pip进行安装&#xff0c;如果提示GPU相关的问题则需要进一步检查 解决 Torch not compiled with CUDA enabled 问题 一、查看…

Arthas 全攻略:让调试变得简单

文章目录 一、简介二、命令列表 一、简介 注意 &#xff1a; 我安装的版本是&#xff1a;Arthas V3.7.2 官网&#xff1a;https://arthas.aliyun.com/doc/ 相关错误解决方案请看GitHub&#xff1a;https://github.com/alibaba/arthas/issues Alibaba开源的Java诊断工具。 从…

我的AI工具箱Tauri版-MicrosoftTTS文本转语音

本教程基于自研的AI工具箱Tauri版进行MicrosoftTTS文本转语音服务。 MicrosoftTTS文本转语音服务 是自研的AI工具箱Tauri版中的一款功能模块&#xff0c;专为实现高效的文本转语音操作而设计。通过集成微软TTS服务&#xff0c;用户可以将大量文本自动转换为自然流畅的语音文件…

圣多纳释放法,达到内心的平静

圣多纳释放法的关键在于&#xff1a;我们被情绪控制时&#xff0c;不应该压抑情绪或是发泄情绪。 利用释放法处理情绪是最健康的方法&#xff0c;可以帮助我们获得自由与平静。当我们面对讨厌的人时&#xff0c;我们真正要做的并非压抑或者爆发&#xff0c;而是将“讨厌”这种…

仪表放大器AD620

AD623 是一款低功耗、高精度的仪表放大器&#xff0c;而不是轨到轨运算放大器。它的输入电压范围并不覆盖整个电源电压&#xff08;轨到轨&#xff09;&#xff0c;但在单电源供电下可以处理接近地电位的输入信号。 AD620 和 AD623 都是仪表放大器&#xff0c;但它们在一些关键…

HTB-Netmon(prtg配置文件获取,CVE-2018-9276复现)

前言 各位师傅大家好&#xff0c;我是qmx_07&#xff0c;今天给大家讲解Netmon靶机 渗透流程 信息搜集 服务器开放了80HTTP、21FTP(匿名登录)、445SMB服务 FTP匿名登录 获取敏感文件 登录后台 网站登录需要 账号、密码 &#xff0c;尝试去FTP服务 碰下运气 通过翻阅ft…

基于Python flask的淘宝商品数据分析可视化系统,包括大屏和主题分析,还有回归预测

背景介绍 随着电子商务的迅猛发展&#xff0c;平台上积累了大量的用户行为和商品交易数据。这些数据蕴含着极大的商业价值&#xff0c;可以为市场趋势预测、商品优化以及用户行为分析提供重要的参考。淘宝作为全球最大的在线购物平台之一&#xff0c;拥有海量的商品和用户数据…

联想一体机怎么重装系统_联想一体机重装win10系统教程

联想一体机怎么重装系统&#xff1f;联想一体机重装系统有很多&#xff0c;有一键重装、有U盘重装、有硬盘重装等方式&#xff0c;最保险的方式是u盘重装系统。需要准备一个空U盘&#xff0c;然后利用第三方工具制作启动u盘&#xff0c;制作完成后进入pe重装系统&#xff0c;下…

集装箱机房可视化:高效管理与监控

通过图扑可视化平台实时监控集装箱机房的运行状态和环境参数&#xff0c;优化资源配置&#xff0c;提升运维效率&#xff0c;确保数据中心安全可靠运行。

Swagger 概念和使用以及遇到的问题

前言 接口文档对于前后端开发人员都十分重要。尤其近几年流行前后端分离后接口文档又变 成重中之重。接口文档固然重要,但是由于项目周期等原因后端人员经常出现无法及时更新&#xff0c; 导致前端人员抱怨接口文档和实际情况不一致。 很多人员会抱怨别人写的接口文档不…

dll注入的实现及session0注入

记录一下跟着红队蓝军师傅学免杀的过程 本节旨在学习dll注入和代码实现并不涉及免杀知识 dll注入流程 dll注入要么注入自己写的程序要么找个程序进行注入&#xff0c;一般是找其他程序进行注入 所以按照上面的步骤进行 其中申请空间&#xff0c;创建线程都是在远程的另一个进…

【Linux】-----进程第一弹

目录 概念 描述进程-PCB 查看进程 获取进程标识符 终止进程 fork创建进程 返回值说明 进程的状态 ①运行状态(R) ②浅度睡眠(S) ③深度睡眠(D) ④暂停状态(T) ⑤僵尸状态(Z)(重点) 是什么&#xff1f; 举例 危害 孤儿进程 ⑥死亡状态(X) 概念 课本上对于进程…

土豆王国小乐队携手阿派朗创造力乐园,打造2024年okgo儿童音乐节

艺术与科技的完美融合&#xff0c;为首都少年儿童带来音乐盛宴 北京&#xff0c;2024年9月19日 —— 备受期待的2024年okgo儿童音乐节即将于9月21日至22日在北京阿派朗创造力乐园盛大开幕。这场由土豆王国小乐队与阿派朗创造力乐园联合举办的音乐节&#xff0c;旨在为首都及全国…

【828华为云征文|华为云Flexus X实例部署指南:轻松搭建可道云KODBOX项目】

文章目录 华为云 Flexus X 实例&#xff1a;引领高效云服务的新时代部署【可道云KODBOX】项目准备工作具体操作指南服务器环境确认宝塔软件商店操作域名解析可道云KODBOX登录页效果验证 总结 华为云 Flexus X 实例&#xff1a;引领高效云服务的新时代 在云计算领域&#xff0c…

基于Ubuntu22.04的cups安装与配置

目录 关于cups 关于cups Linux中的CUPS(Common UNIX Printing System,通用UNIX打印系统)是一个开源的打印系统,它提供了一套完整的管理打印设备、实现可靠打印和网络打印的方案。 Cups安装与与配置 1、升级系统 sudo apt update -y && sudo apt upgrade -y 2、安…

代码随想录算法训练营43期 | Day 20 —— 235.二叉搜索树的最近公共祖先、701.二叉搜索树中的插入操作、450.删除二叉搜索树中的节点

代码随想录算法训练营 代码随想录算法训练营43期235.二叉搜索树的最近公共祖先701.二叉搜索树中的插入操作450.删除二叉搜索树中的节点 代码随想录算法训练营43期 235.二叉搜索树的最近公共祖先 解题思路&#xff1a; 二叉搜索树一定是有序的 判断条件&#xff1a; cur>p &…

MySQL索引知识个人笔记总结(持续整理)

本篇笔记是个人整理的索引知识总结&#xff0c;刚开始有点乱&#xff0c;后续会一直边学边整理边总结 索引&#xff08;index&#xff09;是帮助MySQL高效获取数据的数据结构(有序)。就好比索引就是数据的目录 索引结构 Btree索引,Hash索引,Full-text索引&#xff0c;R-tree(空…

【第十二章:Sentosa_DSML社区版-机器学习回归】

【第十二章&#xff1a;Sentosa_DSML社区版-机器学习回归】 12.1 线性回归 1.算子介绍 线性回归模型(BuildLRNode)是一个非常经典有效的回归模型&#xff0c;它假设所有特征变量和目标变量之间存在线性关系。通过训练来求得各个特征的权重以及截距。同时可以通过L1&#xff0…

GDPU 信息安全 天码行空1 用Wireshark分析典型TCP/IP体系中的协议

文章目录 一、实验目的二、实验内容三、实验步骤1. ICMP&#xff08;控制报文&#xff09;2. IPV4第一个包&#xff08;IPv4&#xff09;第二个包&#xff08;IPv4&#xff09;第三个包&#xff08;ICMP&#xff09; 3. TCP 三次握手 一、实验目的 通过Wireshark软件分析典型网…

网络安全 DVWA通关指南 DVWA Stored Cross Site Scripting (存储型 XSS)

DVWA Stored Cross Site Scripting (存储型 XSS) 文章目录 DVWA Stored Cross Site Scripting (存储型 XSS)XSS跨站原理存储型 LowMediumHighImpossible 参考文献 WEB 安全靶场通关指南 XSS跨站原理 当应用程序发送给浏览器的页面中包含用户提交的数据&#xff0c;但没有经过适…