Windows C套接字,从套接字流中读取N个字节

时间:2020-06-30 09:26:57

标签: c windows sockets

我如何在Windows 10的C中从套接字流中准确读取N个字节,所以我唯一能找到的功能就是recv(),它可以读取所有内容。

1 个答案:

答案 0 :(得分:1)

the official documentation says一样,您必须传递给recv()函数4个参数:

  • s-套接字描述符
  • buf-将保存读取数据的内存缓冲区
  • len-内存缓冲区的长度
  • flags-“影响该功能行为的一个标志或一组标志”

特别是,当最后一个参数设置为定义的值MSG_WAITALL时,recv()函数将仅在以下事件之一发生时完成:

  • 调用者提供的缓冲区已满。
  • 连接已关闭。
  • 请求已被取消或发生错误。

换句话说,如果您想精确地读取10个字节,则应创建一个10个字节的缓冲区,并要求recv()函数仅在缓冲区已满时才返回!

char data[10];
recv(streamSocket, data, 10, MSG_WAITALL);

希望有帮助