在你closesocket之前,有些数据已经在传输网络上了,你close并不影响这些已经在传输网络上的数据。通常情况下,应该先shutdown()在close,以保证在传输网络上的数据正确性

解决方案 »

  1.   


    按你这样试了下,客户端还是会连续收到数据,数据是关闭前最后一次send的数据
      

  2.   

    其实,只要在客户端没有重新connect,即使是服务器端关闭了套接字,客户端send数据,仍然能收到东西的
      

  3.   

    其实,只要在客户端没有重新connect,即使是服务器端关闭了套接字,客户端send数据,再receive数据,客户端是仍然能收到东西的,只是不明白其中的道理
      

  4.   


    按你这样试了下,客户端还是会连续收到数据,数据是关闭前最后一次send的数据这个怎么说呢,记得以前听过“协和客机“的一则趣事是这样说的:
    你在某一点喊了一声,然后迅速开着你的协和客机朝着你喊的方向开过去,你会源源不断的听到你刚才喊的那句话。这则趣事本意是告诉我们,协和客机可以超音速飞行。但是我用这件事告诉你,加入你喊了一句话后,如果你突然被外星人的激光束打中,灰飞烟灭,但是你喊的那句话其实还在空气中传播,直到它能量耗尽为止。之所以告诉你在close之前shutdown一下,等于是说:我要出门的,你们都不要来了,来了也没人在家,但是如果有人已经在来的路上了,你是没辙的,要么你直接锁门让这些在路上的人吃闭门羹,或者等这些人来了以后在锁门。如果还不理解,那就无能为力了
      

  5.   

    其实,只要在客户端没有重新connect,即使是服务器端关闭了套接字,客户端send数据,再receive数据,客户端是仍然能收到东西的,只是不明白其中的道理关闭套接字的协议是优先发送的,所以后面还可能有数据,你需要一直接收数据到返回0就行了.
    关闭连接是单向的,向对方说我不再发送数据了,可以接收,等待对方关闭
      

  6.   

    使用WSASelectEvent,有FD_CLOSE,消息来时,如果wParam是服务器的SOCKET,那么你主动将连接Shutdown,然后Close掉,这样就好了。看这篇关于客户端套接字的文章 http://www.cnblogs.com/EdmundDwyane/p/3248297.html
      

  7.   


    大概看了下,是基于MFC的,我这个问题是在Console控制台上看到的
      

  8.   

    关闭后 套接字变量置为NULL试试
      

  9.   


    大概看了下,是基于MFC的,我这个问题是在Console控制台上看到的你认真看看,所有通信类都是采用Win32API封装。Demo使用时用的MFC而已,你把使用方法照搬到你的Win32工程就行。