TCP网络编程传输文本类文件时保存文件为空白的问题

网络编程——TCP文件传输 网络编程——TCP文件传输 网络编程TCP文件传输 要求  思路  结果  代码  客户端  服务端  要求- 客户端向服务端发起socket连接,建立数据传输通道- 客户端向服务端发送要传输的文件名称,以’#’字符结尾,服务端逐字符接受,知道接收到‘#’- 客户端向服务端发送文件长度,4字节- 客户端向服务端发送文件内容 - 服务端接受完文件之后,发送“OK”- 客户端接收到“OK”,关闭套接字 阅读详情

使用TCP网络编程进行客户端向服务器端传输文件,代码如下:
客户端:
@Test
public void client(){
Socket socket = null;
OutputStream outputStream = null;

    BufferedInputStream bufferedInputStream = null;
    try {
        // 根据地址获取服务端IP对象
        InetAddress byName = InetAddress.getByName("127.0.0.1");
        // 获取socket套接字
        // IP地址 + 端口号
        socket = new Socket(byName,8898);
        // 获取socket的输出流
        outputStream = socket.getOutputStream();

        bufferedInputStream = new BufferedInputStream(new FileInputStream(new File("C:\\Users\\86133\\Desktop\\test.txt")));

        int len;
        byte[] bytes  = new byte[1024];
        while ((len = bufferedInputStream.read(bytes)) != -1) {
            outputStream.write(bytes,0,len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            socket.close();
            outputStream.close();
            bufferedInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务器端:
@Test
public void server(){
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
BufferedOutputStream bufferedOutputStream = null;
try {
// 这个端口号是自己创建的server端口号,
// client端正是根据这个端口号发送信息的
serverSocket = new ServerSocket(8898);
socket = serverSocket.accept();
inputStream = socket.getInputStream();

        bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("C:\\Users\\86133\\Desktop\\test2.txt")));
        int len;
        byte[] bytes = new byte[1024];
        while ((len = inputStream.read(bytes)) != -1){
            String s = String.valueOf(bytes);
            bufferedOutputStream.write(bytes,0,len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            serverSocket.close();
            socket.close();
            inputStream.close();
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

结果:
test2.txt文件夹中没有任何信息:
在这里插入图片描述
对服务器端进行debug,发现一直到文件输出流写入文件部分都没有问题,写入的byte数组是有值的:
在这里插入图片描述
只有可能是文件关闭部分出现问题,发现输出缓冲流bufferedOutputStream未关闭!这会导致文件写入失败!!!

修改后的服务器端:
@Test
public void server(){
ServerSocket serverSocket = null;
Socket socket = null;
InputStream inputStream = null;
BufferedOutputStream bufferedOutputStream = null;
try {
// 这个端口号是自己创建的server端口号,
// client端正是根据这个端口号发送信息的
serverSocket = new ServerSocket(8898);
socket = serverSocket.accept();
inputStream = socket.getInputStream();

        bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(new File("C:\\Users\\86133\\Desktop\\test2.txt")));
        int len;
        byte[] bytes = new byte[1024];
        while ((len = inputStream.read(bytes)) != -1){
            String s = String.valueOf(bytes);
            bufferedOutputStream.write(bytes,0,len);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            serverSocket.close();
            socket.close();
            inputStream.close();
            bufferedOutputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

结果:test2.txt文件成果写入。

Qt网络编程之TCP通信(二)文件传输 一、流程图 上一篇博客介绍了Qt下Tcp通信流程,并实现了简单的文本传输,本文主要介绍Tcp文件传输过程。 同文本传输一样,在传输之前应先建立好连接,服务器应创建监听套接字 Created with Raphaël 2.2.0开始我的操作确认?结束yesno ... 阅读详情

相关推荐

python socket基于TCP的文件传输程序

python socket基于TCP的文件传输程序

weixin_42971644的博客 3150

tcp协议发空(空格或回车)阻塞原因分析

1.客户端可以正常发送空的数据,根据打印结果阻塞的位置在接收的时候。 其原因是客户发送空以后,服务端一直在等待接受数据,但其收不到数据,所以一直的等待接收,造成客户端显示阻塞。 2.receive和send数据都是从本地计算机内存收取数据。 3.windows和unix系统,客户端如果断开,在unix系统显示循环接受空数据,可以使用if判断处理异常。在windows系统里会抛一个异常,connect reseterror,处理异常的方法就是try:和excepition。 ...

yinlingjishu的博客 2195

TCP、UDP文件传输分析

题目要求 为巩固提高网络编程能力,加深对socket套接字的使用,并进一步的理解UDP和TCP之间的不同,该题目主要需完成以下两个目标: 实现跨物理主机的文件传输系统。 分别使用TCP和UDP协议,利用socket库,完成一个文件传输程序。 文本文件能够跨物理主机在局域网内进行传输。 语言不限(python,java,C,C++,C#)。 分析文件传输的时延。 分...

sunrise的博客 4530

android OutputStreamWriter写入指定文件中,文件为空

 public File writeText2SDFromInput(String path , String fileName , InputStream input) { File file = null ; StringBuffer sb = new StringBuffer() ; BufferedReader br = null ; OutputStrea

3387

网络编程:用tcp实现文件传输

用tcp实现文件传输 文件发送端(tcp客户端) 1.网络链接 2.发送文件信息(文件名称, 文件大小) 3.发送文件内容(分段发送) 文件接收端 (tcp服务器) 1.网络初始化监听 2.接收文件信息(创建一个空文件准备接收数据) 3.接收文件内容(分段接收,计算接收得长度==文件大小) 完整代码: 发文件 /* 1. 文件发送端(tcp客户端) 1.网络链接 2.发送文件信息(文件名称, 文件大小) 3.发送文件内容(分段发送) */ #include <stdio.h> #i

qq_42343682的博客 7444

网络编程 基于TCP的多文件传输程序(二)

新人,Java学习中,文章中遗漏错误之处,欢迎斧正 个人博客,完全原创 转载请注明出处。 项目全代码地址:GitHub 前一期文章:网络编程 基于Socket的多文件传输程序实现(一)

Baishu的专栏 4545

当Qt找不到资源文件显示为空时的解决方案

@ https://stackoverflow.com/questions/63954511/qt-creator-release-build-qresource-not-found-error

TheKoi的博客 2418

Linux下基于TCP的文件传输

服务器: #include #include #include #include #include #include #include #define SERVER_PORT 6666 #define LISTEN_QUEUE 20 #define BUFFER_SIZE 1024 int main(int argc,char **argv) { struct socka

Darren's Thought 1万+

Java文件输入流输出流同时操作一个文件时,输出流写入文件内容为空

简单记录的一个容易出错的小问题: 当我们使用Java处理文件时,经常会将输入流、输出流初始化在一起,(习惯方式) BufferedReader br = null; PrintWriter pw = null; try{ br = new BufferedReader(new FileReader(file)); pw = new PrintWriter(file); ...

xiaoying0531的博客 4699

tcpping 一个很好用的网络判断工具

tcpping 一个很好用的网络判断工具

具有I2S输出的多模数字麦克风ICS-43434咪头LR引脚接地或电源WS接LRCLK

ICS-43434 是一款数字 IS 输出底部收音孔麦克风。完整的 ICS-43434 解决方案包括 MEMS 传感器、信号调理、模数转换器、抽取和抗混叠滤波器、电源管理以及行业标准的 24 位 12S 接口。12S 接口允许 ICS-43434 直接连接到数字处理器,例如 DSP 和微控制器,而无需系统中的音频编解码器。

易板 5665

写入文件后, 读取时仍然为空的问题

没有刷入磁盘,数据还在缓冲区。导致没读到

weixin_45642669的博客 634

FreeSWITCH安装指南:三种部署方式解析与实践对比

Freeswitch部署方案比较:Yum安装简单快捷但灵活性差;源码安装可定制性强,适合深度开发和性能优化;Docker部署环境一致性好但网络配置复杂。生产环境推荐源码安装以获得最佳性能和定制能力,而Docker适合快速部署和扩展。不同方案各有利弊,需根据具体需求选择。

c_zyer的博客 2141

c++网络编程——用TCP实现文件传输(windows下基于VS2017)

文件传输协议FTP是基于TCP协议实现的,为了体验这个过程,本文自定义一个简单的文件传输协议,并基于TCP协议编程实现,经过本机和局域网的测试,代码初步可用。

weixin_42119432的博客 1万+

自动驾驶开发者必看:如何用Impromptu VLA数据集提升模型在乡村道路的表现(附实战代码)

本文为自动驾驶开发者提供了利用Impromptu VLA开源数据集提升模型在乡村道路等极端场景表现的实战指南。该数据集专门针对边界模糊道路、非常规障碍物等非结构化环境,通过精选的8万多个极端场景片段,帮助模型弥补数据分布偏差。文章详细介绍了环境搭建、数据准备、模型微调及性能评估的全流程,并附有实战代码,旨在系统性提升自动驾驶系统在长尾场景下的鲁棒性。

t8u9v0w1x的博客 243

深入探究贝叶斯网络(Bayesian Network):从基础原理到实际应用

贝叶斯网络,也称为信念网络或有向无环图模型,是一种概率图模型。它使用有向无环图(DAG)来表示随机变量之间的条件依赖关系。每个节点代表一个随机变量,边表示变量之间的条件依赖关系。贝叶斯网络作为一种强大的工具,通过结合概率论和图论,为复杂系统建模和推理提供了有效手段。无论是在医学诊断、故障检测还是自然语言处理等领域,它都展示了巨大的潜力。然而,其计算复杂度高、结构学习困难等挑战也需要我们在实际应用中不断优化算法和技术。希望通过本文,你能对贝叶斯网络有更深入的理解,并能够在实际项目中灵活应用这一强大工具。

qq_28791753的博客 5973

qt+TCP文件传输

简述 刚开始学习qt,在学习完网络编程后,觉得还是需要总结一下,毕竟总结才能更加的深刻。 本人第一次在csdn上写博客,想监督一下自己,让自己有一个学习的动力。好了不多说了, 目录 目录 简述 一、网络体系结构模型 二、TCP/IP协议 1、TCP/IP介绍 2、TCP/IP结构 3、TCP传输协议 三、socket套接字 1、Socket 2、在linux中C...

weixin_42127499的博客 7007

【科研绘图系列】R语言绘制代谢物与临床表型相关性的森林图

本研究通过森林图展示了特定代谢物与三种临床比较之间的相关性分析结果。这种方法不仅直观地展示了每个代谢物的效应大小和不确定性,还允许我们比较不同代谢物在不同临床比较中的影响。森林图的结果表明,某些代谢物在特定临床比较中显示出显著的相关性,这可能为理解疾病的代谢机制提供了重要线索。

专注生信领域 565

【Linux网络编程】传输层中的TCP和UDP(TCP篇)

本篇博客将会介绍TCP底层,了解TCP机制

m0_74215144的博客 1772

[工作流节点24] 外部用户审批的实现方式:让客户、供应商也能参与流程决策

摘要: 明道云支持通过三种方式实现外部用户审批:1)外部表单审批(推荐方案),通过公开表单让外部用户提交审批意见并自动触发流程;2)链接参数审批,通过含参数的URL实现一键确认;3)API/Webhook审批,适用于系统集成场景。三种方案均无需外部用户登录,支持记录操作日志和安全审计。典型应用包括客户确认报价、供应商发货确认等,实现内外流程无缝衔接。建议根据业务复杂度选择:无代码需求用外部表单,轻量审批用链接参数,系统对接用Webhook。

每日出拳老爷子的博客 347

python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法

出现该Bug的原因主要是 账号密码无法登录,但原先使用该代码测试qq或者163的时候是可以通过的!问题在于各个公司邮件所处理的代码方式不一样

码农研究僧的博客 3503

QT之网络编程-文件传输

昨天我们写了QT之TCP网络编程,今天就来看一下,在QT下的文件传输,这是在昨天所写代码的基础上添加上的。。 先看一下最终效果: 文件传输主要步骤: 服务器端: 1、打开服务器端的文件所在路径 QString filePath = QFileDialog::getOpenFileName(this,"选择文件","../"); 2、打开文件 bool isOK = file.open(Q...

weixin_42579072的博客 5060

基于YOLOv8的视频监控违规停车智能识别系统与应用研究

通过这个毕设,你已经从数据准备、模型训练到界面开发,完整走了一遍深度学习项目的流程。把多个停车场的监控数据整合起来,做一个区域级的停车管理平台;加入车牌识别功能,直接定位到违规车辆的车主;试试把YOLO模型再优化一下,让它在手机端也能运行,实现移动巡检。相信我,按照这个教程一步步做,你的毕设不仅能顺利完成,还能做出亮点,让答辩老师眼前一亮。要是过程中遇到什么问题,随时可以再琢磨琢磨,或者找我聊聊,咱们一起把这个毕设做成精品。

LXY_LOVE36的博客 118

学习网络编程No.12【传输层协议之TCP】

深入理解三次握手四次挥手,TCP各种策略,setsockopt接口的使用,shutdown接口的使用场景,粘包问题的来源与解决。

狂小伍的博客 2640

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java实现两台电脑间TCP协议文件传输

java实现两台电脑间TCP协议文件传输 记录下之前所做的客户端向服务端发送文件的小项目,总结下学习到的一些方法与思路。 注:本文参考自《黑马程序员》视频。 首先明确需求,在同一局域网下的机器人A想给喜欢了很久的机器人B发送情书,但是机器人B事先并不知道小A的心思,那么作为月老(红娘)该如何帮助他们呢? 然后建立模型并拆分需求。这里两台主机使用网线直连,在物理层上确保建立了...

Black-REN 6735

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Linux网络编程】传输层协议TCP,UDP

客户端调用connect发起三次握手,向服务器发起建立连接的请求。而服务器端通过listen将自己设置为监听状态。本质上,connect是发起三次握手,但是不参与三次握手的。服务器端通过accept获取底层建立好的连接,也不参与三次握手。

2401_82677021的博客 1927

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: 使用Filter和ThreadLocal对JAVAWeb工程进行事务管理以处理异常并利用Tomcat进行页面跳转注意事项
下一篇: MySQL数据库报错:Error Code: 1175. You are using safe update mode and you tried to update a table without
Dame'Seven
博客等级 码龄8年 21粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dame'Seven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值