服务器采用 完成端口 用 WSASend 发送数据(返回值等于0,表示发送成功,接下来完成端口Get函数也显示数据全部发送了),发送成功之后就closesocket客户端采用阻塞模式  用 recv接收数据  (recv返回值等于0,表示服务器关闭连接,但是可以接收到数据,recv第二个参数返回了接收的字节数)请问为什么!!?问题原帖  回答了给分
http://topic.csdn.net/u/20090318/20/d38b0b07-8285-4c34-8676-a4ad8e080a14.html

解决方案 »

  1.   

    服务器采用 完成端口 用 WSASend 发送数据(返回值等于0,表示发送成功,
    不表示发送成功,只是表示请求发送成功,数据发完了会在get函数给你结果
    接下来完成端口Get函数也显示数据全部发送了)
    GetQueuedCompletionStatus(...&BytesSend...) 第二个参数表示发送出的字节数,GetQueuedCompletionStatus(...)
    //之前要声明公共变量:DWORD dwCount;//通常入到socket结构体里
    //这里可以打印每次发出的字节数BytesSend
    dwCount += BytesSend;统计累计发出多少
    //通过dwCount检测发送的结果,以便下一步处理//你是这样做的吗?
    WSASend(...)//如果要检验发送结果,必须是个死循环//你是这样做的吗
    ,发送成功之后就closesocket [/color]
    这里情况很难说,没这样做过,可以先屏掉此代码,以退出工作线程代替(retrun)
    if dwCount == 你要的结果
    {
       return;
    }发送完了就closesocket我没这样做过,sleep(1000),再closesocket()?//纯属个人猜想客户端采用阻塞模式  用 recv接收数据  (recv返回值等于0,表示服务器关闭连接,但是可以接收到数据,recv第二个参数返回了接收的字节数)阻塞模式recv返回值等于0,无需检测recv其它任何参数,表示对方断开连接,即使检测到了,也没啥意义