为什么send比recv快?该怎么处理

为什么send比recv快?
最近因为项目需要做了一个文件传输的程序(c/s结构)。可是却遇到个奇怪的问题,从客户端上传文件到服务器时速度非常快(局域网内达到12M/S),但是从服务器下载文件却很慢(局域网1M/S),我跟踪了一下程序发现在下载的时候recv基本上都只能收到3460字节,需要多次recv,而服务器端却是一次性发2M的数据过来。并且有些时候recv还会报WSAECONNABORTED错误,这是为什么呢?

------解决方案--------------------
服务器下行带宽是不是被其他的进程占用了?
------解决方案--------------------
你接收部分的代码怎么写的?buf缓冲区定义多大?
------解决方案--------------------
nRecvRet = recv(m_hSocket,(char*)&pBuf[nRecvSize],nSize,0);

初始nSize可是pBuf的大小?



------解决方案--------------------
探讨
引用:

nRecvRet = recv(m_hSocket,(char*)&pBuf[nRecvSize],nSize,0);

初始nSize可是pBuf的大小?


nSize=2M。
如果将客户端和服务器在同一台机器上运行就没有问题(send和recv都是2M),但在两台机器上运行就出现recv很慢的情况了,如果是网络环境……

------解决方案--------------------
你把服务端与客户端所在机器对调一下,不就知道代码有没有问题了?
------解决方案--------------------
应该是linger 选项 没有设置够。
发送端把2M数据发出去了,实际在在CACHE里,然后关闭SOCKET,如果linger不够长,就会导致,另一段接收数据不完整,出现连接断开的错误。
所以,应该是发完数据,不要关闭socket,应该调用recv,等到一个确认数据接收完毕的确认包,就不会有这样的问题。