用send()发送数据,由于程序需要连着发送两次不同的小的数据,在接收端却两个数据一起接收了,但我想让它们被分开接收,好处理不同的情况。这个该怎么办啊? 

解决方案 »

  1.   

    我的做法是中间加一句Sleep(20)就可以了
      

  2.   

    可以使用TCP_NODELAY选项关闭Nagle算法根本上还是需要加上包头控制信息(包长,包类型)+包体(传送内容)来解决,然后进行 拆包和组包
      

  3.   

    很容易的说,像telnet,ftp协议等都是发送字符串的,但是他们如何确保接收到的不是两个命令合并到一起的呢?
    比如ftp的两条指令:
    USER xx\r\n
    ABOR\r\n接收方就是一个字符一个字符的接收,每接收到一个就判断是不是\n?之前的是不是\r?
    根据\r\n来停止接收,执行完操作后再重复上面的接收步骤。这就是最基本的应用层协议,你也可以每发送一个字符串的时候先发送一个long值表示后面的字符串的长度,接收者则先接收4字节,即一个long值,然后判断后面有多少字符,然后在循环里直到接收到刚刚好的长度后才退出。
      

  4.   

    还是定义一个包格式吧,比如包类型+包长+pdu(数据体),这也是一些应用层协议通常使用的手法,这样即使连续接受数据,也可以很容易地分开处理。如果采用sleep方式,效率是不是会太低?
      

  5.   

    异步类CAsyncSocket里面 的回调函数onReceive不是接受到一个字符串就调用一次的吗?
    我想利用这个来处理两个消息接受成一个的问题,结果发现不行。