Socket的网络编程

最近在做Socket网络编程相关的项目,因此在此记录下一些心得体会吧!   关于基于Socket的网络编程,一般指的是开发基于C/S模式的网络程序。由于有多线程的处理,例如开发一个高性能的服务器,难度不低,我在做一个基于自定义协议的文件下载的服务器以及客户端的时候,遇到的问题确实很多,也正如某人在网上所说,10054,10053的错误的原因是最难找的,特别是涉及多线程处理的时候。现在就在这个问题的困惑中,具体原因实在不敢肯定,现象也有些怪异,服务器在多线程提供下载文件的时候,在send文件信息时,会出现个别10054错误,客户端也是多线程下载,但是并非10054表明的一样,客户端并没有关掉Socket,下载线程也没有退出,经过检查是down在recv函数上,这样就有些无法解释,明明客户端的连接保持着,服务器却出现10054!!!,        先说下10054错误的官方原因: WSAECONNRESET(10054)Connection reset by peer. 存在的连接被远程主机强制关闭。通常原因为:远程主机上对等方应用程序突然停止运行,或远程主机重新启动,或远程主机在远程方套接字上使用了“强制”关闭(参见 setsockopt(SO_LINGER))。另外,在一个或多个操作正在进行时,如果连接因“keep-alive”活动检测到一个失败而中断,也可能导致此错误。此时,正在进行的操作以错误码 WSAENETRESET失败返回,后续操作将失败返回错误码 WSAECONNRESET。                这样的解释并不合理,我能想到的原因是:服务器send速度太快,客户端接受太慢,但是也没有任何资料说明会引发10054错误,但是经过在send之前或后Sleep(200)后,就不会出现这个错误,但是这样的解决方案,大幅度降低了服务器的性能,非常的不可取!目前还在查找原因,着手与多线程的处理吧!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值