jer*_*liu 4 sockets virtualbox centos windows-7
我有一个C/S程序.客户端使用套接字向服务器发送文件,发送大约700k以上的数据后,客户端(在win7上)将收到套接字10054错误,这意味着连接由对等方重置.
服务器在CentOS 5.4上运行,客户端是在虚拟机中运行的windows7虚拟机.客户端和服务器通过虚拟网络接口进行通信.命令端口(发送日志)是正常的,但数据端口(发送文件)有问题.如果是由套接字缓冲区大小配置错误引起的?如果有人可以帮我检查问题.谢谢.
每次调用socket时发送一个缓冲区等于4096字节发送(socket,buffer,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
Run Code Online (Sandbox Code Playgroud)
我不太明白套接字缓冲区配置意味着什么,如果这会导致接收不完整的结果问题?
这几乎肯定是代码中的一个错误.最有可能的是,一方认为另一方已超时,因此异常关闭连接.这种情况最常见的方式是你调用一个接收函数来获取数据,但实际上你已经获得了那些数据并且没有意识到这一点.因此,您正在等待已收到的数据,从而超时.
例如:
1)客户端发送消息.
2)客户端发送另一条消息.
3)服务器读取两个消息,但认为它只有一个,发送一个确认.
4)客户端收到确认,等待第二次确认哪个服务器永远不会发送.
5)服务器等待它实际已经收到的第二条消息.
现在服务器正在等待客户端,客户端正在等待服务器.服务器编码错误,并没有意识到它实际上一次收到两条消息.TCP不保留消息边界.
如果你告诉我有关你的协议的更多信息,我可以更详细地告诉你出了什么问题.什么构成了信息?哪一方发送的时间?有没有确认?等等.
但简短的版本是每一方都可能在等待另一方.
最有可能的是,对等体重置连接是一种症状.您的问题发生,一方面超时并中止连接.这导致另一方重置连接,因为另一方中止了连接.
| 归档时间: |
|
| 查看次数: |
25309 次 |
| 最近记录: |