当前位置: 技术问答>linux和unix
TCP的一个问题
来源: 互联网 发布时间:2016-09-19
本文导语: 大家好,第一次在Linux版块提问。先说说我遇到的问题。 我在Windows下用VC编写了一个Server,在Linux下写一个Client。Server与Client建立连接之后,Client发送数据到Server,Server接收完数据之后,发送一...
大家好,第一次在Linux版块提问。先说说我遇到的问题。
我在Windows下用VC编写了一个Server,在Linux下写一个Client。Server与Client建立连接之后,Client发送数据到Server,Server接收完数据之后,发送一个字串“recv end”给Client。Client接收到“recv end”后,接着发送数据。重复一上过程。(看起来比较复杂,其实就是反复发送)
功能很简单,但是偏偏出现了一个奇怪的问题。
Client端发送反复发送数据(Client发送数据除第一次外,一定是接收到了Server的“recv end”),发送到第7次,Client不再执行send(),程序停留在send()之前,不再往后执行。
为了确认Server端接收到了数据而且发送了“recv end”,我在Client端打印出接收到的数据,一共有6个“recv end”。
该问题具有可重复性,反复试验都是在第七次出现该问题。求教大牛。
还有个地方补充一下,send()的数据长度为61440.
我在Windows下用VC编写了一个Server,在Linux下写一个Client。Server与Client建立连接之后,Client发送数据到Server,Server接收完数据之后,发送一个字串“recv end”给Client。Client接收到“recv end”后,接着发送数据。重复一上过程。(看起来比较复杂,其实就是反复发送)
功能很简单,但是偏偏出现了一个奇怪的问题。
Client端发送反复发送数据(Client发送数据除第一次外,一定是接收到了Server的“recv end”),发送到第7次,Client不再执行send(),程序停留在send()之前,不再往后执行。
为了确认Server端接收到了数据而且发送了“recv end”,我在Client端打印出接收到的数据,一共有6个“recv end”。
该问题具有可重复性,反复试验都是在第七次出现该问题。求教大牛。
还有个地方补充一下,send()的数据长度为61440.
|
1。不确定你的recv和send是阻塞还是非阻塞
2。第7次server的send返回是成功还是失败,也就是说client端是否接受到。
3。估计你的client是先调用recv,当第7次recv没有收到server的应答时发生阻塞,或者收到了个0(关闭)
4。你的server端每次收到的数据全部正确吗?用TCP发送接近64k的数据,有没有校验你的数据正确性。
5。你的Linux系统是桌面的还是嵌入式的
2。第7次server的send返回是成功还是失败,也就是说client端是否接受到。
3。估计你的client是先调用recv,当第7次recv没有收到server的应答时发生阻塞,或者收到了个0(关闭)
4。你的server端每次收到的数据全部正确吗?用TCP发送接近64k的数据,有没有校验你的数据正确性。
5。你的Linux系统是桌面的还是嵌入式的
|
还有个地方补充一下,send()的数据长度为61440.
------------
楼主检查send的返回值了吗?send()的返回值是成功发送的字节数。
------------
楼主检查send的返回值了吗?send()的返回值是成功发送的字节数。