我们想从udp套接字接收数据包,udp数据包的长度是可变的,在我们接收到它们之前我们不知道它们到底有多长(部分准确,长度写在第六个字节)。
我们尝试了函数lrs_set_receive_option with MarkerEnd,但发现它对这个问题没有帮助。我们之所以要按包接收,是因为我们需要通过发回用户自定义的udp包来响应一些包。
有没有人知道如何做到这一点?
更新
- LR 版本似乎是 v10 或 v11。
我们需要通过立即发回 udp 数据包来响应传入的 udp 数据包。
udp包可能是这样的
|兽人代码 |数据包长度 |真实数据 |
问题是我们不能让 loadrunner 为每个数据包返回数据,有时它会在缓冲区中返回许多数据包,有时它会等到超时,尽管套接字缓冲区中有传入数据包。 而在 c 编程语言世界中,当调用 recvfrom(udp socket) 时,我们每次(每次调用)只返回一个 udp 数据包,这是我们真正想要的。
最佳答案
如果您需要原始套接字支持以在数据包级别进行拦截,那么您可能必须跳转到具有原始套接字支持的 Visual Studio 中的 DLL 虚拟用户。
关于您关于 UDP 支持的问题:是的,Winsock 用户支持两种核心传输类型,UDP 和 TCP。 TCP 是面向连接的更常见的变体。但是,数据包检查是在 OSI 模型的第 3 层进行的,用于运营商协议(protocol) IP。 ACK 应该在您收到供您在脚本中使用的数据流之前出现。当您跳转到 TCP 和 UDP 级别时,您正在查看 data.ws 中组装的数据流。
现在,您可能会收到有关接收缓冲区大小不匹配的警告,这会导致您走这条与记录大小不匹配的路径。有一种简单的方法可以解决这个问题。如果您获取发送缓冲区并使用 lrs_set_send_buffer() 函数构造它,则返回的任何内容都将被视为正确,忽略先前记录的缓冲区大小并且不必等待匹配或超时继续。
关于LoadRunner可以通过UDP包接收数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27399793/