C# Socket传输文件

wewei123shangdawei 2010-10-14 11:36:31
由于工作需要,需要做一个远程文件上传程序。现在遇到个难题,希望和大家一起探讨。

1.客户端如何知道服务器端成功接收文件?
现在的解决方案是,客户端传完文件便接收服务器端(只有接收完文件后发送)传回的自定义协议信息,但由于都是采用的异步发送和获取,加上如果传的文件过大或网络过慢,就很难即时获取服务器传回的协议信息。感觉没有保障。

2.客户端如何在短时间内发送多个文件?
就是刚传完一个文件后紧接着又传输另一个文件。有点和上面类型的情况,如果网络慢或文件大,服务器没能及时接收完数据,而客户端又准备就绪。如果这时再传输就可能会出错。


这里说明,如果客户端与服务器成功建立连接后,期间就只使用一个网络流传输。
...全文
426 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
“感觉没有保障”这种托词不具有编程、测试的实际功能,因此也就没有什么实际可说给你听的。

把你的感觉忘掉,写出实际测试结果!
headsonlkc 2010-10-15
  • 打赏
  • 举报
回复
服务端每次接收数据后回发一个信息给客户端,共收到的文件大小,这样应该可以
客户端判断是否该文件上传完了再开始另一个文件的传送

能成功传送一个文件,那多个也就是思路问题,应该也不难,我写的是打包好一次过传送,
接收好了,再解包!
zhangkaigod2000 2010-10-15
  • 打赏
  • 举报
回复
http://www.csharpwin.com/csharpresource/1135.shtml
上面这个代码有异步传输的例子!看下?
ttyyadd 2010-10-15
  • 打赏
  • 举报
回复
首先使用线程可以保障,接收多个文件。客户端发送一个包而不是文件数据,而是关于文件的信息,如文件大小,格式等。
founderfang 2010-10-15
  • 打赏
  • 举报
回复
考虑一下用标准的协议ftp,简单一点的tftp,自己定义一个文件传送协议有点重造轮子的嫌疑。
编程爱好者L 2010-10-15
  • 打赏
  • 举报
回复
对于你的第二个问题我建议你用队列来保存你要发送的消息,用一个线程去监听这个队列是否有信息,如果有信息的就发送.
wewei123shangdawei 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sp1234 的回复:]
“感觉没有保障”这种托词不具有编程、测试的实际功能,因此也就没有什么实际可说给你听的。

把你的感觉忘掉,写出实际测试结果!
[/Quote]
你说得很对!

测试的结果是没有保障!
对于小的文件(1k)可以,大点(10k)的就不行了。
CGabriel 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用楼主 wewei123shangdawei 的回复:]
由于工作需要,需要做一个远程文件上传程序。现在遇到个难题,希望和大家一起探讨。

1.客户端如何知道服务器端成功接收文件?
现在的解决方案是,客户端传完文件便接收服务器端(只有接收完文件后发送)传回的自定义协议信息,但由于都是采用的异步发送和获取,加上如果传的文件过大或网络过慢,就很难即时获取服务器传回的协议信息。感觉没有保障。

2.客户端如何在短时间内发送多个文件?
就是刚……
[/Quote]

1. TCP 协议是一个面向连接的协议。只可能有两种情况: 传输正常 or 掉线。不存在任何丢包,出错之类的问题。
2. Socket 有缓冲区,能够装下未处理的数据。
3. Socket 是支持双工的,服务器在接受数据的时候,也可以发数据给客户端,告诉它已经收到多少。这仅需要一个 Socket 就可以了。

如果还是出错。。。。看来你的程序需要改一下了。
jointan 2010-10-14
  • 打赏
  • 举报
回复
没弄过这些,理论上,可以变异步为分线程中用短连接同步

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧