//这是客户端的部分代码
strReply = "TEST_T_CODE_110000000";
m_pSkClient->Send(strReply,strReply.GetLength());
strReply = "TEST_CMM_R_1";
m_pSkClient->Send(strReply,strReply.GetLength());然后我在服务器端用MessageBox把收到的消息弹出来,我预期的效果应该是弹出两次,分别显示TEST_T_CODE_110000000和TEST_CMM_R_1,但现在就弹出一次,显示TEST_T_CODE_110000000TEST_CMM_R_1,也就是说把接连两次Send的内容拼在了一起,请问如何解决?

解决方案 »

  1.   

    在 TEST_T_CODE_110000000TEST 之后,send 一个标识符,例如 '\n'
    在接受方,将接受到的数据按 '\n' 分解成两部分
      

  2.   

    这是由于两次Send()相隔时间太短,发送数据均填入发送缓冲区中,而系统为了提高通讯效率,一次发送所有数据,将原本2段数据当成1段发出。
    可以在两次Send()之间加上Sleep(200),可以简单解决问题,或通过强制Send()后刷新发送缓冲区的方式完成。
    qwedcxza(自娱自乐)的方法也可行,但较适合大量数据处理程序。
      

  3.   

    请问CounterHack,怎么刷新发送缓冲区?
      

  4.   

    楼上,CounterHack(反击黑客)正解,在 《TCP/IP详解 卷一 协议》中,第19章,TCP的交互数据流中,当一个方向有多个小数据包发送时,200毫秒中的数据会合成一个大包一起发送,以避免网络上大量小数据包的发送降低网络的利用率。
      

  5.   

    Sleep(200)没用啊,Sleep(20000)我试了都没用,怎么回事?
      

  6.   

    好象是Client 与 Server 在同一台机器上才会出这个问题吧