加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

套接字 – 套接字错误10054

发布时间:2020-12-14 03:51:54 所属栏目:Windows 来源:网络整理
导读:我有一个C / S程序.客户端使用套接字向服务器发送文件,发送大约700k以上的数据后,客户端(在win7上)将收到套接字10054错误,这意味着连接由对等方重置. 服务器在CentOS 5.4上运行,客户端是在虚拟机中运行的windows7虚拟机.客户端和服务器通过虚拟网络接口进行
我有一个C / S程序.客户端使用套接字向服务器发送文件,发送大约700k以上的数据后,客户端(在win7上)将收到套接字10054错误,这意味着连接由对等方重置.

服务器在CentOS 5.4上运行,客户端是在虚拟机中运行的windows7虚拟机.客户端和服务器通过虚拟网络接口进行通信.
命令端口(发送日志)是正常的,但数据端口(发送文件)有问题.
如果是由套接字缓冲区大小配置错误引起的?
如果有人可以帮我检查问题.谢谢.

每次调用socket时发送缓冲区等于4096字节
发送(套接字,缓冲区,4096,0)

CentOS套接字配置.

#sysctl -a
...
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.ipv4.tcp_mem = 196608       262144  393216
net.ipv4.tcp_dsack = 1
net.ipv4.tcp_ecn = 0
net.ipv4.tcp_reordering = 3
net.ipv4.tcp_fack = 1

我不太明白套接字缓冲区配置意味着什么,如果这会导致接收不完整的结果问题?

解决方法

这几乎肯定是代码中的一个错误.最有可能的是,一方认为另一方已超时,因此异常关闭连接.这种情况最常见的方式是你调用一个接收函数来获取数据,但实际上你已经获得了那些数据并且没有意识到这一点.因此,您正在等待已收到的数据,从而超时.

例如:

1)客户端发送消息.

2)客户端发送另一条消息.

3)服务器读取两条消息,但认为它只有一条,发送一个确认.

4)客户端收到确认,等待第二次确认哪个服务器永远不会发送.

5)服务器等待它实际已经收到的第二条消息.

现在服务器正在等待客户端,客户端正在等待服务器.服务器编码错误,并没有意识到它实际上一次收到两条消息. TCP不保留消息边界.

如果你告诉我有关你的协议的更多信息,我可以更详细地告诉你出了什么问题.什么构成了信息?哪一方发送的时间?有没有确认?等等.

但简短的版本是每一方都可能在等待另一方.

最有可能的是,对等体重置连接是一种症状.您的问题发生,一方面超时并中止连接.这导致另一方重置连接,因为另一方中止了连接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读