当前位置: 首页 > 知识库问答 >
问题:

UDP recvfrom查询

仲孙飞文
2023-03-14
int recvfrom(SOCKET            socket, 
             char            * buffer, 
             int               buflen, 
             int               flags, 
             struct sockaddr * from, 
             int             * fromlen);

我知道recvfrom()从套接字中读取buflen后立即返回。我的问题是-

>

  • 如果我请求了2000的buflen,而套接字队列中的单个数据包大小为2400,该怎么办?

    如果我请求了2000的buflen,而套接字队列中的单个数据包大小为1400,该怎么办?

    上述问题的答案是否适用于TCP和UDP?如果没有,有什么区别。

    请提前回复。

  • 共有2个答案

    艾望
    2023-03-14

    recvfrom()从套接字最多读取buflen。它可以读取更少的内容,这就是为什么您应该始终检查返回值的原因。

    1) 它会将2000字节复制到您的缓冲区中。对于UDP,多余的数据将丢失。对于TCP,您应该能够通过另一个调用recvfrom()来接收它。

    2)它将复制1400字节到您的缓冲区。

    3) 通常,recvfrom()用于UDP,recv()用于TCP,但在其他方面,行为与上述相同。

    梁丘波
    2023-03-14

    首先,recvfrom()仅在已经有内容等待读取或套接字处于非阻塞模式时立即返回。否则,它等待数据到达。

    其次,UDP要么全有要么全无。与对流数据进行操作的TCP不同,UDP在数据报中操作,数据报不能分片读取。

    因此,要回答您的问题:

    >

    缓冲区足够大,可以接收完整的数据报,因此1400字节将被复制到缓冲区中。

    这些不适用于TCP。首先,您通常不会在TCP中使用recvfrom(),而是使用recv()。但是在这两种情况下,在TCP中,recv/from()接收当时当前可用的任何字节,如果需要,阻塞,最多可达指定的字节数,但可能更少。您可以继续html" target="_blank">调用recv/from()来接收剩余的字节,因为TCP是基于流的。由于UDP是基于消息的,您无法接收剩余的字节,它们会丢失。下一个recv/from()将读取下一个可用的数据报。

     类似资料:
    • 我刚开始在DynamoDB上建一个社交网站。 我将有相当数量的数据与一个用户相关,我计划将这些全部放入一个表中--例如: 用户ID 出生日期 头发 照片URL 详细信息 可能有几百个属性。 问题: 将这么多数据放入一个表中有什么问题吗? 我如何查询该数据(我是否可以执行类似这样的查询:“所有在这个年龄,这个颜色头发,这个位置,并且这次登录的成员)-假设所有这些数据都包含在表中? 如果一个表的内容很

    • 以下策略可用于仓库基础结构来解决查询。你可以在XML配置中的命名空间通过query-lookup-strategy属性来配置策略或者在JAVA配置中通过Enable${store}Repositories声明queryLookupStrategy属性。有些策略可能对于特别的datastores并不支持。 CREATE 从查询方法名来尝试构建一个特别的数据查询。一般的方法都是从方法名称中移除已知设定

    • 问题内容: 我正在尝试使用Elasticsearch获得完全匹配的结果(所以我不在乎在这里得分) 我看到有两种方法可以做到这一点: 要么 两者都能工作,并给我想要的结果。它们之间有什么区别?使用一个与另一个相比有性能优势吗? (我正在使用Elasticsearch V 5.6) 谢谢 ! 问题答案: 恒定分数查询可为任何匹配的文档提供相等的分数,而与诸如等等的任何评分因素无关。当您不关心文档是否匹

    • Graphql 为查询而生,所以我们首先试试它的查询功能吧. 准备工作 克隆库: git clone https://github.com/zhouyuexie/learn-graphql 安装依赖: cd learn-graphql && npm install 运行: npm start 现在打开你的浏览器输入http://localhost:12580/graphql,或者点击这里. Gra

    • 说明 微信支付-订单附加信息查询接口SDK。 官方文档:https://pay.weixin.qq.com/wiki/doc/api/external/declarecustom.php?chapter=18_2 类 请求参数类 请求参数 类名:\Yurun\PaySDK\Weixin\CustomDeclareQuery\Request 属性 名称 类型 说明 $_apiMethod strin

    • 说明 支付宝报关查询 官方文档:https://docs.open.alipay.com/155/104780/ 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\Customs\Submit\Request 属性 名称 类型 说明 $service string 接口名称 $out_request_no string 报关请求号 需要查询的商户端报关

    • 说明 支付宝境外在线支付-查询 官方文档:https://global.alipay.com/service/website_split_cn/13 类 请求参数类 请求参数 类名:\Yurun\PaySDK\AlipayCrossBorder\Online\Query\Request 属性 名称 类型 说明 $service string 接口名称 $trade_no string 支付宝根据商

    • 模型查询和数据库查询方法的区别主要在于,模型中的查询的数据在获取的时候会经过获取器的处理,以及更加对象化的获取方式。 模型查询除了使用自身的查询方法外,一样可以使用数据库的查询构造器,返回的都是模型对象实例。但如果直接调用查询对象的方法,IDE可能无法完成自动提示。 获取单个数据 获取单个数据的方法包括: // 取出主键为1的数据 $user = User::get(1); echo $user-