C# WPF经TCP向C客户端传输多文件时内容错乱、接收大小为0问题排查
C#(WPF)端与C客户端TCP文件传输异常排查请求
基本场景
基于WPF框架开发的C# GUI程序,需通过TCP Socket将本地存储的3个文件传输给C语言实现的客户端程序,待传输的文件路径预先存储在数组中。目前遇到两类核心传输异常,经多日排查仍未定位根因,恳请社区协助指出代码疏漏、明确故障产生根源。
具体异常表现
- 第一类异常:已成功传输的单个文件在接收端写入本地时出现内容错位——文件末尾额外追加8个空值、文件开头丢失前4个字符
- 第二类异常:剩余2个文件在C接收端解析文件大小字段时,读取到的数值为0,无法正常完成接收流程
两端核心实现逻辑
C#发送端
- 初始化流程:创建
IPEndPoint绑定指定端口,初始化TCP监听Socket,待客户端接入后,循环调用SendFile方法,按路径数组顺序发送对应目标文件 SendFile方法实现步骤:- 通过
FileInfo获取目标文件的大小值 - 借助
BinaryWriter将文件大小值写入MemoryStream完成序列化,截取前4字节发送给客户端 - 通过
FileStream分块读取文件内容,持续发送至Socket连接
- 通过
C接收端
- 已封装三类基础工具方法:
- 可循环接收直至收满指定字节数的
recv_raw方法 - 基于
recv_raw解析文件大小字段的recv_file_len方法 - 按解析得到的文件长度循环接收数据并写入本地文件的
write_data方法
- 可循环接收直至收满指定字节数的
- 主流程逻辑:依次打开三个待写入的目标本地文件,按序调用
write_data方法完成三个文件的接收
内容的提问来源于stack exchange,提问作者user14368706
相关产品推荐
相关产品推荐

