ruby - 在 Ruby 中构建 UDP 数据报

标签 ruby networking udp

Ruby 库或 Ruby gem 中是否有任何内容可以帮助我构建 UDP 数据报?我研究过套接字,但似乎没有一种方法可以简单地构建一个而不发送它。

我的用例是这样的: 我需要构建一个 UDP 数据报,然后将其传递给另一个模块,该模块将负责将其发送出去。简而言之,我只需要能够指定 src/dst 地址和端口,以及有效负载。

我想在最坏的情况下,我可以构建某种结构并手动填充相应的位,但这感觉就像重新发明轮子以及大量的工作。套接字 API 中的底层内容应该有类似的东西可供我使用,不是吗?

最佳答案

所谓的socket API本质上是一个非常低级的C语言API。当您创建 UDP 套接字时,连接信息存储在内核中。您永远不会“构建 UDP 数据报”,而是将数据写入 UDP 套接字文件描述符,然后在内核内部构建要通过线路发送的物理数据包。

所以,是的,如果您想要一个可以在应用程序中传递的数据结构,其中包含目标地址和一些数据,那么您需要自己创建此结构,因为它本身在其他任何地方都不存在。

工作量并不大。只有两个(或三个)数据元素。您可以使用简单的 Struct 来完成这项工作,除非您需要更复杂的功能,然后只需构建一个普通的类。

编辑

看来我误解了你的问题。请参阅下面我的评论以获取资源。例如,以下是 Racket library docs 中的一些代码,这可能更接近您正在寻找的内容:

 # tack on UDP
 n.l4 = UDP.new
 # randomize source port
 n.l4.src_port = 1024 + rand(65535-1024)
 # take destination port from the commandline
 n.l4.dst_port = ARGV[2].to_i
 # build a random amount of garbage for the payload
 n.l4.payload = Misc.randstring(ARGV[3].to_i)

 # fix 'er  up (checksum, length) prior to sending
 n.l4.fix!(n.l3.src_ip, n.l3.dst_ip)

关于ruby - 在 Ruby 中构建 UDP 数据报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16957089/

相关文章:

c - 从 Linux C 向许多 Android 手机发送 UDP 消息

java - 什么是 Java 对 Ruby 单例的等价物

Ruby 取消对象创建

java - 有什么好的 ice4j 教程吗?

java - 重用 ObjectInputStream 会抛出 StreamCorruptedException

networking - 尽力而为流量和实时流量的区别

ruby-on-rails - 具有可能不同类型 mongoid 的字段

ruby - 在每个线程的基础上设置 ruby​​ logger.progname

java - 如何解析通过 TCP 收到的损坏消息

c++ - 获取UDP数据包的目的地址