在客户端建立一个CSocket对象,create类型为SOCK_STREAM,发送一查询帧下去,根据具体的协议知道服务器返回的数据一定超过一帧,这样就出现接收多帧的情况。
  问题1:在当服务器将一帧数据发送到我的客户端,在我还没有设置接收缓冲区大小,并且没有recv的时候,服务器又发送一帧数据到我的客户端是否就把前面的那帧数据冲掉了,还是放在前一帧数据的后面?那个缓冲区是否就是网络缓冲区,它有多大 ?
   问题2 :我知道接收一帧数据的最大值,那么是利用ioctlsocket先读出网络缓存区内数据的大小动态建立接收缓存区还是就按照最大值设置一个固定的接收缓冲区大小好呢?

解决方案 »

  1.   

    问题1   放在前一帧数据的后面   因为SOCK_STREAM传输是基于流的  不是数据报套接字问题2  对于我 我喜欢用ioctlsocket
      

  2.   

    1。tcp收发缓冲区模认是8192,可以通过setsockopt()修改。可能一次收到多条消息,因为sock_stream传送的是数据流,不是基于消息的。
    2。我一般是设一个接收最大值,然后接收。前提是单个数据包比较少(大约<1k),保证Receving时不要阻塞。不过我同意用ioctlsocket,不过这时要根据数据包头取出消息总长度,然后取出整个消息,或者继续接收下面的缓冲区,然后组成一条消息,比较麻烦!视情况而定。
    如果你单次发送接收的消息比较短,我建议只接收发送一次,同时按照最大值设置一个固定的缓冲区。