Socket网络编程练习二

从客户端发送文件到服务端,服务端保存到本地,并发送确认消息给客户端,并关闭相应的连接
package internet;import org.junit.Test;import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;/*** @author 苗晓强* @date 2023/8/6 16:56* 从客户端发送文件到服务端,服务端保存到本地,并发送确认消息给客户端,并关闭相应的连接*/
public class TCPTest2 {@Testpublic void client() {File srcFile = new File("picture.jpg");FileInputStream fileInputStream = null;Socket socket = null;OutputStream outputStream = null;InputStream inputStream = null;ByteArrayOutputStream byteArrayOutputStream = null;try {fileInputStream = new FileInputStream(srcFile);InetAddress inetAddress = InetAddress.getByName("192.168.126.1");int port = 8989;socket = new Socket(inetAddress,port);outputStream = socket.getOutputStream();//读写文件int len;byte [] buffer = new byte[1024];while ((len = fileInputStream.read(buffer)) != -1){outputStream.write(buffer,0,len);}//关闭客户端的流输出,避免服务端一直等待socket.shutdownOutput();System.out.println("客户端发送完毕!");//客户端接收服务端发回的确认消息inputStream = socket.getInputStream();byteArrayOutputStream = new ByteArrayOutputStream();while ((len = inputStream.read(buffer)) != -1){byteArrayOutputStream.write(buffer,0,len);}System.out.println(byteArrayOutputStream.toString());} catch (IOException e) {e.printStackTrace();} finally {if (byteArrayOutputStream != null){try {byteArrayOutputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (fileInputStream != null){try {fileInputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}}}@Testpublic void server(){int port = 8989;ServerSocket serverSocket = null;Socket socket = null;InputStream inputStream = null;FileOutputStream fileOutputStream = null;OutputStream outputStream = null;try {serverSocket = new ServerSocket(port);socket = serverSocket.accept();//通过 socket 获取一个输入流inputStream = socket.getInputStream();//创建File类的实例 FileOutputStream 的实例File descFile = new File("picture_0806.jpg");fileOutputStream = new FileOutputStream(descFile);//读写过程int len;byte [] buffer = new byte[1024];while ((len = inputStream.read(buffer)) != -1){fileOutputStream.write(buffer,0,len);}System.out.println("服务端接收完毕");//通过 socket 获取输出流 服务端发送确认消息给客户端outputStream = socket.getOutputStream();outputStream.write("你的图片很漂亮,我已收到图片".getBytes());System.out.println("服务端发送完毕!");} catch (IOException e) {e.printStackTrace();} finally {if (outputStream != null){try {outputStream.close();} catch (IOException e) {e.printStackTrace();}}if (fileOutputStream != null){try {fileOutputStream.close();} catch (IOException e) {e.printStackTrace();}}if (inputStream != null){try {inputStream.close();} catch (IOException e) {e.printStackTrace();}}if (socket != null){try {socket.close();} catch (IOException e) {e.printStackTrace();}}if (serverSocket != null){try {serverSocket.close();} catch (IOException e) {e.printStackTrace();}}}}
}

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

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

相关文章

Spring的AutoWrite自动装配

一、概念 首先要了解一个思想就是IOC思想(控制反转),由此我们便需要使用DI(依赖注入),依赖注入可以注入对象、字符串、等等,在注入对象时,我们往往需要手动new一个对象进行注入,自动装配就是代替我们手动new对象这一过…

图像快速傅里叶变换的工业应用案例简介:图像自相关,背景纹理去除,旋转矫正,划痕检测

快速傅里叶变换是非常重要的数学分析工具,同时也是一种非常重要的信号处理方法。 下面借助Halcon商业图像处理库,介绍些工业应用案例,我们可以通过案例理解图像快速傅里叶变换的一些应用场景。 案例1:图像自相关性确定芯片间距 …

体育赛事管理系统的设计与实现(源码+论文)_kaic

摘要 许多年以前,人们在对数据进行统计和记录时候,使用的是纸和笔,对于大量数据的记录很不方便,使用的人力物力也很庞大,到了现在,人们对纸和笔的依赖慢慢降低,在如今的互联网时代,…

python爬虫1:基础知识

python爬虫1:基础知识 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 目录结构 文章目录 python爬虫1:基础知识1. 基础认知1.1 什么是爬虫&…

3.CNI网络

文章目录 CNI网络FlannelUDP模式VXLAN模式部署flannel CalicoCalico模式Calico部署 flannel 和 calico 区别 CNI网络 K8S 中 Pod 网络通信: Pod 内容器与容器之间的通信 在同一个 Pod 内的容器(Pod 内的容器是不会跨宿主机的)共享同一个网络命…

Redis内网主从节点搭建

Redis内网主从节点搭建 1、文件上传2、服务安装3、服务启动4、配置主从复制 1、文件上传 内网环境手动上传gcc-c、redis.tar文件 2、服务安装 # 解压 unzip gcc-c.zip unzip gcc_rpm.zip tar -zxvf redis-6.2.13.tar.gz# 安装 cd gcc_rpm/ rpm -ivh *.rpm --nodeps --force…

【HDFS】每天一个RPC系列----complete(二):客户端侧

上图给出了最终会调用到complete RPC的客户端侧方法链路(除去Router那条线了)。 org.apache.hadoop.hdfs.DFSOutputStream#completeFile(org.apache.hadoop.hdfs.protocol.ExtendedBlock): 下面这个方法在complete rpc返回true之前,会进行重试,直到超过最大重试次数抛异…

ChatGPT下架官方检测工具,承认无法鉴别AI内容

去年底,OpenAI 推出的 ChatGPT ,带来了生成式人工智能涌现的热潮。它不仅能够协助完成撰写邮件、视频脚本、文案、翻译、代码等任务,还能通过学习和理解人类的语言来进行对话,并根据聊天的上下文进行互动。 但随之而来的争议也让人…

整理一些Postgresql工作中常用面试中会问的问题---Postgresql面试题001

1.什么是Postgresql TOAST? TOAST (The Oversized-Attribute Storage Technique,超大尺寸字段存储技术)主要用于存储大字段的值。 PostgreSQL 页面(page)大小是固定的(通常为8KB),且不允许tuples跨多个页面存储。因此不能存储非常大的字段值。为了克服这个限制,大字段…

IOS开发:指定路径创建新文件夹

指定路径创建新文件夹 典型错误示范: let documentDirectoryURL FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0] let directoryURL documentDirectoryURL.appendingPathComponent("FolderName", isDirectory: true)if F…

Service not registered 异常导致手机重启分析

和你一起终身学习,这里是程序员Android 经典好文推荐,通过阅读本文,您将收获以下知识点: 一、Service not registered 异常导致手机重启二、Service not registered 解决方案 一、Service not registered 异常导致手机重启 1.重启 的部分Log如…

ruby调试

如果下载 ruby-debug-ide gem install ruby-debug-ide vscode 下载 ruby扩展 1, ruby 2,修改launch.json

Zebec 创始人 Sam 对话社区,“Zebec 生态发展”主题 AMA 回顾总结

近日,Zebec Protocol 创始人 Sam 作为嘉宾,与社区进行了以“Zebec 生态发展”为主题的 AMA 对话。Sam 在线上访谈上对 Zebec 路线图、Zebec 质押、NautChain通证进行了解读,并对 Zebec 的进展、生态建设的愿景进行了展望。本文将对本次 AMA 进…

C语言第十四课-------结构体的认识和使用-------重要一笔

作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂…

P1195 口袋的天空

口袋的天空 题目背景 小杉坐在教室里,透过口袋一样的窗户看口袋一样的天空。 有很多云飘在那里,看起来很漂亮,小杉想摘下那样美的几朵云,做成棉花糖。 题目描述 给你云朵的个数 N N N,再给你 M M M 个关系&…

mac m1使用docker安装kafka

1.拉取镜像 docker pull zookeeper docker pull wurstmeister/kafka 2.启动zookeeper docker run -d --name zookeeper -p 2181:2181 zookeeper 3.设置zookeeper容器对外服务的ip Zookeeper_Server_IP$(docker inspect zookeeper --format{{ .NetworkSettings.IPAddress }}…

Rocky(centos) jar 注册成服务,能开机自启动

概述 涉及:1)sh 无法直接运行java命令,可以软连,此处是直接路径 2)sh脚本报一堆空格换行错误:需将转成unix标准格式; #切换到上传的脚本路径 dos2unix 脚本文件名.sh 2)SELINUX …

【博客685】prometheus 出现NaN场景以及如何去除干扰(Not a Number)

prometheus 出现NaN场景以及如何去除干扰(Not a Number) 1、在prometheus中使用NaN来表示无效数值或者结果 场景: 一些监控系统使用 NaN 作为空值或缺失值,但在 Prometheus 中 NaN 只是另一个浮点值。Prometheus 表示缺失数据的方式是让数据缺失。Prom…

哪些年,我们编程四处找的环境依赖

基于Maven&#xff0c;快速构建SSM项目 <properties><!-- 将spring和有关的升级版本&#xff0c;设置为5.0.5--><spring.version>5.0.5.RELEASE</spring.version><!-- 将mybatis和有关的升级版本&#xff0c;设置为3.1.1--><my…

深度Q学习的收敛性分析:通过渐近分析方法

深度Q学习收敛性分析:通过渐近分析方法 1. 概述1.1. 理论的相关研究1.2. 主要贡献1.2.1. 目标网络1.2.2. 经验回放2. 神经网络2.1. 前馈网络2.2. 激活函数σ2.3. 深度Q网络3. 深度Q学习:算法和假设4. 收敛性分析4.1. DQN的连续化深度Q学习是一种重要的强化学习算法,它涉及到…