问题标签 [recvfrom]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
321 浏览

c - 为什么 recvfrom 会创建额外的 IP 标头?

为什么要recvfrom创建额外的 IP 标头?

我正在发送:

但是当我尝试接收数据时,看起来有

客户端代码:

服务器代码:

0 投票
1 回答
1181 浏览

c - recvfrom 调用上的分段错误

我有一个 UDP 服务器实现,我在recvfrom调用时遇到分段错误。

在此之前绑定和连接都是成功的。这是一个单线程进程。recvfrom这个电话有什么问题。我需要做SIGALRM信号处理recvfrom吗?truncate_size_t_to_int 用于将 size_t 转换为 int。

0 投票
1 回答
1942 浏览

sockets - 如何禁用设置的超时 setsockopt()?

在我正在开发的程序中,我设置了一个超时使用setsockopt(),以防止recvfrom()无限期阻塞。如何禁用超时?

(我在 Ubuntu 上)

0 投票
0 回答
176 浏览

c++ - recvfrom 不在客户端工作

我正在制作一个低级别的对等应用程序,当一个对等点需要知道什么文件与什么对等点在一起时,它会询问跟踪器/服务器(它正在维护一个寄存器)。跟踪器然后回复该对等体的地址。在我的程序中,跟踪器端正在无故障地发送对等信息,但在接收端没有接收到该信息。我已经浪费了几个小时试图解决这个问题,而且我已经无法解决这个问题。询问跟踪器/服务器的方法的代码是

看看你能不能帮忙。谢谢你的期待:)

编辑:由于 recvfrom 是一个阻塞调用,我的程序会无限等待来自跟踪器/服务器的消息,即使消息已经发送。

0 投票
1 回答
2565 浏览

python - recvfrom() 没有收到任何数据 - python

我正在编写一个简单的程序来获取从我的机器到任意站点(在本例中为 www.google.com.

我的程序似乎卡在了 recvfrom() 调用上。我已将其设置为非阻塞套接字,因此我可以看到错误:

当我将它作为阻塞套接字运行时,程序只会永远运行。

下面是我的源代码。知道为什么我会遇到这个问题吗?谢谢!

0 投票
1 回答
1130 浏览

c - 从 recvfrom 获取缓冲区

我正在尝试编写井字游戏通过 UDP 进行通信。现在我有代码:

现在我需要从中获取缓冲区recv_txt,将其放入如下结构中:

并将其传递给新线程。但我无法从中获取缓冲区recv_txt。我在 C 中很新,现在我不能很好地使用指针。

感谢您的任何建议。

编辑

我尝试了 Frankie_c 提供的解决方案,但我printf现在遇到了问题。当我尝试main

我没有得到任何打印到控制台或收到错误消息。

EDIT2 - 完整代码

收到一个数据包后,我得到:

0 投票
1 回答
52 浏览

c - 如何在 1 秒后丢弃消息?(C 中的 UDP 客户端/服务器)

我有一个基于http://cs.baylor.edu/~donahoo/practical/CSockets/code/UDPEchoClient.c的 UDP 客户端 ,客户端发送一条消息,服务器将其回显。我有一个可配置的服务器,我可以在其中丢弃数据包,并且我正在发送多条消息,而不是上面链接的代码中的 1 条。如果超过 1 秒,如何让消息丢弃?截至目前,我在 recvfrom() 中获取每条消息后正在检查它,但我希望我的整个程序在 ~1.5 秒内运行,因为我不想为每条消息等待 1 秒(如果有很多消息)。有没有办法像计时器或其他东西一样附加到每条消息,以便如果在 1 秒内没有收到它,它会认为自己被丢弃?谢谢!

0 投票
0 回答
1946 浏览

c - recvfrom() 超时 c 编程

我将超时设置为recvfrom(). 我在 Cygwin64 环境下运行我的代码。

.his 是我的代码示例:

程序一直在等待recvfrom():超时不起作用。

0 投票
2 回答
2071 浏览

c - C:Linux Sockets:Recvfrom() 获取 UDP 数据包太慢

我正在以10Mbps的速率接收 UDP 数据包。每个数据包由大约1109 个字节组成。因此,我在eth0上收到的速度超过1pkt/ms。C 中的C 接收数据包并将数据包传递给 Java。Java 对数据包进行过滤和必要的处理。recvfrom()

瓶颈是:

  1. recvfrom()太慢了:获取时间超过 10 毫秒可能是因为它没有得到 CPU。

  2. 通过接口(JNI)将数据包从 C 传递到 Java 需要 1-2 毫秒。

  3. Java 本身处理数据包需要 0.5 到 1 秒,具体取决于是否需要进行数据库插入或图像处理。

所以,问题是许多延迟加起来,超过一半的数据包丢失。

可能的解决方案可能是:

  1. 完全不需要 C 语言recvfrom(),直接在 Java 中实现 UDP 获取(注意:首先,C 语言的 recvfrom() 被实现为接收原始数据包而不是 UDP)。此解决方案可以减少 JNI 传输延迟。

  2. 在Java中对UDP接收函数实现多线程。但是随后在 UDP 数据包中需要一个 ID 用于序列,因为在多线程中,传入数据包的顺序不能保证。(但是,在这个特定的程序中,需要订购数据包)。此解决方案可能有助于接收所有数据包,但需要修改发送数据的协议以添加序列标识符。由于多线程,接收方可能有更高的机会获得 CPU 并且可以快速获取数据包。

  3. 在 Java 中,阻塞队列可以实现为一个巨大的缓冲区,用于存储传入的数据包。Java 解析器然后可以使用来自该队列的数据包来处理它。但是,不确定接收器功能是否足够快并将所有接收到的数据包放入队列而不丢弃任何数据包。

我想知道哪些解决方案可能是最佳的,或者上述解决方案的组合将起作用。任何帮助或建议将不胜感激。

0 投票
1 回答
327 浏览

performance - 为什么 sendto 的成本远高于 recvfrom

我编写了一个非常简单的程序,一台 PC 执行 udp sendto,另一台 PC 执行 recvfrom。在 1Gbps 以太网链路上,发送端花费 13% 的 CPU,而接收端只花费 5%。
任何人都知道为什么 sendto 的成本比 recvfrom 高这么多,以及降低发件人成本的好主意,非常感谢!
主要代码: