解决方案 »
- 关于c#数据结构的设计
- C#根据设置的周期时间去扫描给的路径中的文件
- winform textbox 只能输入数字和小数点
- 【顶者有分】可移动小标签(控件)!
- 我在做一个聊天程序,不知道用UDP还是TCP
- c# 如何用 foreach 循环一个datatable 呢? 谢谢
- 多线程问题!!!
- 设计模式是什么东东?
- winform,文档被占用,无法打开
- 安装了VS2017, 安卓开发怎么感觉这么不一样?控件拖进去后运行就没有
- 如何实现输入笔记本的型号,得出参考价的功能。台式机的话机是检测硬件(已实现),如何得出参考价?
- dev gridcontrol searchlookupedit 带出记录显示 对象必须实现Iconvertible
我给你的建议是 如果是10M的文件 你可以分十次来传 一次传1M (我只是比方说)
然后在发送文件之前 向对方发送 文件传输命令 在传递完成后 向对方发送传递完成命令
你没有对Socket封装 你直接使用它的Send和Receiver 这样做项目的话 如果遇到传文件的需求 然后就可以 呵呵了
虽然发送接收都用了后台线程来做,但是接收端的缓存数组大小必须要比发送端的小很多才不会接收时缺少数据。
如发送端我设为64K 而接收端要设为8K 才正常。接收到的数据缺失的情况是接收端的缓存比8K越大 缺失得越严重这让我想到一个问题。是不是使用TCP的方法发送 也要对分片的每一次发送的数据进行接收端手动确认才行?那UDP 没什么好大区别了
看样子是楼主的接收代码过度包装了,其实的很简单的一块,只需两句。
while ((receiveLength = ns.Read(recBufs, 0, recBufs.Length)) > 0)
{
wr.Write(recBufs, 0, receiveLength);
}
接收端接收不过来?那怎么处理比较 好
如果文件有10M 那就传10次 不是文件缺失 而是 大文件你的bufferSize不够大 接受不了那么大的文件
明明是同步的逻辑,非要用异步的API实现, 何必呢?直接用同步的API不就好了,
socket.send(), socket.receive(),
简简单单就好了