socket向服务器传文件,客户端数量多就出问题,什么原因呢?

huoyanshan 2017-09-09 03:28:49
客户端exe,用socket方式向服务器传输文件,连续传送多个文件,每个文件几KB大小,
当客户端数量超过两百个的时候,会导致有的客户端连接不上或文件传输不完整,这种并发的情况要怎么解决呢?


目前使用的是类似下面这个网页的socket监听方式
http://www.cnblogs.com/Mr_JinRui/archive/2010/04/28/1723056.html
或者不用socket,有没有其他更高效解决并发传输文件的技术方法?
希望懂这方面的朋友帮忙解答一下,不胜感激!
...全文
348 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
huoyanshan 2017-09-18
  • 打赏
  • 举报
回复
我是楼主,非常感谢几位的提示和帮助,对我很有启发。感谢!!
大麦芽糖 2017-09-11
  • 打赏
  • 举报
回复
引用 楼主 huoyanshan 的回复:
客户端exe,用socket方式向服务器传输文件,连续传送多个文件,每个文件几KB大小, 当客户端数量超过两百个的时候,会导致有的客户端连接不上或文件传输不完整,这种并发的情况要怎么解决呢? 目前使用的是类似下面这个网页的socket监听方式 http://www.cnblogs.com/Mr_JinRui/archive/2010/04/28/1723056.html 或者不用socket,有没有其他更高效解决并发传输文件的技术方法? 希望懂这方面的朋友帮忙解答一下,不胜感激!
先测试服务的最大并发量,在单位时间内的多少接收量不会造成丢包。然后以此为准考虑负载均衡。并发量无法控制的,这取决于用户。并发量大的时候肯定会有丢包的。要处理好丢包后的工作。一般是超时提醒。
  • 打赏
  • 举报
回复
稍微正规、实际的通讯软件设计,可能并不会阻塞式 Accept,或者至少不是阻塞式 Receive。在 s.Send 方面那个代码也完全是乱的。正规的通讯软件是在一个端口(端口就对应着应用的概念)承载上百个以上信令,所以必定有信令设计,不会是只知道一种所谓的“长度+字节内容”的设计。有了信令、有了异步收发,进一步地就会支持在一个通道并发发送,例如同一个客户端会并发发送1、2、3、4、5号消息,分别代表着5个文件或者5个文件的5个数据块,然后服务器可能按照3、2、4、5、1的顺序响应的,那么客户端就会先把第3个文件的下一个数据块发送出去......如果你只是看你贴出的那个例子来学习,那么那是刚学习编程的时候才看的,基本上你还需要几年时间才能学到通讯知识。
  • 打赏
  • 举报
回复
引用 楼主 huoyanshan 的回复:
目前使用的是类似下面这个网页的socket监听方式 http://www.cnblogs.com/Mr_JinRui/archive/2010/04/28/1723056.html 或者不用socket,
这个网页上的代码只是一个功能的说明,针对的是完全是刚学Accept语句的人的方式(不需要什么实用流程设计的方式)。你应该先学习实际的通讯程序知识,起码你看的文章应该是连续不断地异步收发数据的例子。
homesos 2017-09-09
  • 打赏
  • 举报
回复
服务端,侦听接收客户端连接的就只接收连接,收到连接开个线程去处理这个客户端的消息。
xian_wwq 2017-09-09
  • 打赏
  • 举报
回复
要保证效率,还得socket, 看业务的数据量 200*10KB 大约2M左右,这个网络需求在百兆网内也不算大 看示例代码, 有几个点可以优化: 1. 把数据接收和数据解析没有分离,数据解析耗时会直接导致网络通讯超时而中断; 2. 建议使用利用SocketAsyncEventArgs替代同步socket操作,性能会大大提升

110,537

社区成员

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

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

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