我不知道怎么才能实现一个同步的socket,利用mfc中的CSocket类能不能达到目的??我主要是想这样的:我想在 调用send函数的时候 如果对方还没有收完我send的数据,send就一直处于阻塞状态。主要是因为我的代码中每段要发送的数据都有一个头、然后才是实用数据。所以我不希望我在收的时候 缓冲区里有不同的send发送的数据(这样我还的判断是那次、有几次,从哪开始分割。然后才能取出我要的数据,不仅不易控制而且还容易出错)。 不知道能不能实现?

解决方案 »

  1.   

    首先CSocket能满足你的要求
    其次,你所说的问题靠多个异步socket也能实现
      

  2.   

    逍遥兄 来了 失敬失敬 我可经常看见你帮人回答问题,先谢了
    不过 能再说的详细点吗?
    我试过CSocket 我用一个没有调用receive的客户端连接一个服务器服务器端在连客户连上之后 连续的调用send函数,结果客户端根本没收
    send函数全部调用成功了,这不是我想要的 我是想如果没人收 就得阻塞
      

  3.   

    调用send函数的时候 如果对方还没有收完我send的数据,send就一直处于阻塞状态。>>CSocket 可以满足你的。
    如果对方(接受方)的window(可以理解为接受缓冲)不为0,那么就可以send。
    在你的实验里面,之所以可以连续的send,就是这个原因。要做到这点。可以这样:
    client recv 后就向 server 发送一个消息,说收到了。
    接着 server 就可以继续发,要不然(没有收到消息),就不能发(send)。
      

  4.   

    在socket的底层实现中,有一个类似滑动窗口的概念,该窗口有一定的buffer,当你send某些数据时,只要系统成功的将数据拷贝到发送buffer中,就会提示你成功。
    —————————————————————————————————
    Let your soul guide you upon your way
    my qq is :131780
      

  5.   

    谁能给个用CSocket实现同步多线程的服务器端例程 我送他100分
      

  6.   

    建议最好不要用CSocket,它有可能无缘无故就阻塞在那里,动都不动!
    至于CSocket实现同步多线程的服务器端例程在MSDN\sample\vc\mfc\advance\
    里面有!
      

  7.   

    我写了个小东西,是局域网的聊天室,使用多线程,同步,select模型。自己封装的 winsock api 。在csdn的软件原码里面(VC++6 MFC),作者是HongHuer如果你有兴趣,可以自己找来看看。