c/s结构, client通过tcp连接到服务器,服务器接受连接后, 向这个通道连续发送一些数据, 然后就关闭连接, 现在的问题是, client有时收不到所有数据连接就断开了, 特别是用了http代理的情况下, 请问有什么办法解决这个问题吗, 另外,服务器在发送前设置了一个很大(足够容纳发送的数据)的sndbuf,  这样做有没有影响?另外还有一个问题,是关于mfc的, 我发现为什么普通的工作者线程为什么不能去操作由主介面线程创建的窗口? 比如mainframe里面创建一个dlg, 工作线程无法去destory 这个窗口

解决方案 »

  1.   

    是还没有收完时, recv()就返回0了
      

  2.   

    让你的server端稍等会退出,sleep一会,因为server发送完就关闭,client的socket就会也跟着就关闭了,此时有可能client还没有接收完毕
      

  3.   

    不是服务器发客户端收吗?当然要等到收完了由客户端关闭啊!
    recv()返回0的情况,我也遇到过,我也不知道怎么回事,但返回0并不代表出错啊!(-1才是有问题)
    recv()返回0的问题我的解决办法就是继续Recv直到收到协议中规定的长度。
    另外在socket通讯中最好把数据装在报文里
      

  4.   

    从容关闭.其实使用的手段可以很多的, 发送的时候也应该有缓冲,不能一下子全发出去, 网络响应是有限的. 太快了就丢包了. 需要发送的数据包都放在一个缓冲链表内, 当SOCKET 空闲的时候就去检缓冲链表,有数据就发, 没数据就等待
      

  5.   

    有什么手段? 我现在知道的是在关闭连接之前sleep一下,客户端就能收到,但是这样做很不好啊, 这个时间也不好设定