在服务器端我想做成回应了客户端的数据就关闭SOCKET,
...
send(...);
closesocket(...)
这样做行吗?
别笑我,我是新手。

解决方案 »

  1.   

    好象不能马上就关闭SOCKET,最好Sleep()一段时间再关闭
      

  2.   

    NO,The data may lost The best method is to set the linger time,it ensures the data was sent succeedly
    and The sleep function may be ok,but it it not the standard method
      

  3.   

    如果设置了延时,则有可能不丢数据
    //延时设置
    linger m_sLinger;m_sLinger.l_onoff = 1; // (在closesocket()调用,但是还有数据没发送完毕的时候容许逗留)m_sLinger.l_linger = 0; // (容许逗留的时间为0秒)setsockopt(sockConnected,SOL_SOCKET,SO_LINGER,(const char*)&m_sLinger,sizeof(linger));
      

  4.   

    还有,如果你用的是socket API,可以通过Socket close 返回,WSAGetLastError来判断是不是正在有数据通讯的.参见MSDN closesocket()
      

  5.   

    借地方再问个问题哈.
    如果客户端send(..)后,服务器接收到,然后closesocket了,同时客户端又send了数据.
    那么此同发送的数据,客户端这边会显示成功吗?
      

  6.   

    send will failed with return value -1,you can retrieve more information by calling WSAGetLastErorr()
      

  7.   

    如果采用blocking则send返回时数据已经发送,是可以关闭的,但是在closesocket前最好先shutdown.
      

  8.   

    调用shutdown可以关闭,以保证发送完成,TCP/IP协议会保证这事情。
      

  9.   

    最好 sleep 一下,我試的就有點問題