问题标签 [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 投票
1 回答
63 浏览

udp - recvfrom 用于存储在 2D Char 数组中

尝试使用 recvfrom 函数在 2D Char 数组中收集 1261 UDP 数据包

我尝试使用的代码是:

或者不知道如何开始只是想将所有 1261 个数据包存储到 RxBuff 中,以便我可以通过其数据包编号访问数据包数据,以便通过其数据包编号从数据包中获取数据。

0 投票
0 回答
231 浏览

c - recvmmsg/recv/recvfrom 块在高负载下

我们在 Centos 6 上有一个应用程序,它调用recvmmsg()多播地址一次读取 1024 个 UDP 数据包。当我们在同一个盒子上运行这个应用程序的多个实例(都监听相同的流量)时,有时这个调用会阻塞几秒钟,尽管套接字是非阻塞的,并且传入了MSG_DONTWAIT. 它在所有其他情况下都可以正常工作,但会在高负载 (50MB/s) 下冻结。当应用程序阻塞时,我们落后于 UDP 流量并且无法恢复。该进程使用 RR 调度程序作为高优先级运行,以避免来自其他进程的干扰。我们也尝试切换到for 循环recvfrom()recv()获得相同的结果。

我们可以在内核源代码中看到的唯一可以阻止它的是spin_lock_irqsave()__skb_try_recv_datagram(). 但我不知道在什么情况下会出现问题,或者如何处理它以防止阻塞,或者这是否真的是问题。

我不确定下一步该往哪里看,所以任何指针都将不胜感激。

创建了一个非常简单的程序,可以在我们看到它的一个服务器上复制它(没有粘贴接口检索功能,但这不应该在这里相关,如果你需要它,请告诉我)。

recv() 示例:

recvmmsg() 示例:

0 投票
1 回答
1185 浏览

c++ - 套接字 UDP- 程序在 recvfrom 处停止

我尝试通过 UDP 将数据从一台计算机发送到另一台计算机(第一台计算机:Ubuntu,C++ with Eclipse,第二台计算机 Windows 10 Matlab 2014b)。C++ 计算机应该作为服务器工作。将数据从 C++ 发送到 Matlab 工作正常,但我无法以相反的方向发送数据。每次我的 C++ 程序到达 recvfrom() 时,它都会在此时空闲,不再做任何事情,即使 matlab 一遍又一遍地发送数据。我尝试通过 netcat 在 ubuntu 上接收数据,同时使用 Matlab 发送包,效果也很好。即使我用 select() 尝试了一些东西,但这只会导致程序到达 select() 时等待 10 秒,然后再次在 recvfrom 处冻结。如果有人可以给我一些帮助,我将不胜感激。

0 投票
0 回答
189 浏览

c - UDP没有第二次接收

我不太了解网络连接。我遵循了很多示例代码,它第一次有效,但第二次无效,这没有任何意义。

“服务器端”是运行 Ubuntu 16.04 的 PC。“客户端”在 TI DSP 上运行 LwIP。这是有效的代码部分:

该块的目的是让客户端知道服务器所在的IP地址,因此服务器端知道谁在那里。它最终需要扩展以处理多个客户,但一步一步!

我尝试使用不同的套接字,然后尝试了第一次收到的同一个套接字,但同样的事情发生了。以下部分起作用:

然后当我打电话时什么也没有出现:

在此之后,我进行了时钟检查,并在 30 秒后尝试重新发送。在wireshark 上,我看到了sendto() 的传出消息以及LwIP/DSP 的响应。但是, recv() 永远不会得到任何响应!

我尝试使用不同的端口、不同的套接字、关闭第一个套接字并创建一个新的套接字,但它永远不会在第二个 UDP 上看到响应。

我假设有一些我没有看到的微不足道的东西,并且所有不同的尝试组合都绕过了它,而不是解决了问题。其中一些组合包括将 &si_radar、&rlen 放在 recvfrom() 中而不是 NULL、0 以及类似

然后使用 rdrSock 代替 usock。没区别。

有谁知道为什么?UDP 应该只发送数据和获取数据,尤其是当它进入端口时!谢谢,迈克

0 投票
2 回答
306 浏览

linux - 为什么在流套接字上使用的 recvfrom() 会返回零地址和端口?

我使用的是 Linux 系统,而不是 Windows 系统。我在下面发布了一些代码。请记住,此代码从未打算成为“生产质量”。

当代码运行并且您从两个或多个客户端(通过 telnet)连接时,每条消息都将发送者显示为“0.0.0.0”,端口为 0。

recvfrom() 的 Windows 文档指出“[t]he fromfromlen参数对于面向连接的套接字将被忽略。” Linux 和 POSIX 文档没有做出这样的声明,甚至说 recvfrom() “......可以用于在套接字上接收数据,无论它是否面向连接。” 没有在哪里说src_addraddrlen将被忽略......所以我希望这些被填写。

0 投票
0 回答
413 浏览

python - socket.recvfrom() 返回的结果

我在 python-3.5 中有这个简单的代码:

recvfrom() 在 raw_data 变量中返回在套接字上接收到的数据,在 addr 变量中返回一个元组。

这个返回的元组 (addr) 中有 5 个元素,我找不到不同元素的含义。

addr[0] 包含接收 raw_data 的接口的名称。

addr[1] 包含收到的 Ethertype。

addr[4] 包含发送者的第 2 层地址(据我所知)。

元素 addr[2] 和 addr[3] 中包含的值是什么?

0 投票
0 回答
291 浏览

linux - 非阻塞 tcp 客户端程序集

我正在尝试为交换数据创建一个 tcp 客户端。客户端应该首先发送消息。如果消息正确,并且用户已获得财产授权,则系统回复消息“询问”,确认会话已成功绑定。

recvfrom 返回 0。代码有什么问题?

0 投票
0 回答
67 浏览

c - C UDP read 和 recv 正在破坏我的代码

所以我正在使用 UDP 套接字和 poll(),试图能够同时等待连接和读取输入,但我遇到了最奇怪的错误,我不知道如何处理它。这是我的代码中导致问题的部分。

所以这就是奇怪的地方。当我运行此代码时,它会打印出 loop1,但不会打印 loop2,即使我在开头明确设置了 n=1。我将 loop1 打印语句更改为 "printf("now n is %d\n", n);" 看看发生了什么,然后它根本没有打印任何东西。

为了增加这个谜团,无论我使用 read 还是 recv,都会发生这种情况,但是当我注释掉这两个时,我的代码进入两个循环就好了。

因此,在到达这些行之前, read 和 recv 都以某种方式阻止了我的程序以应有的方式运行。我不知道会发生什么,我最好的猜测是这是我不知道的一些晦涩的 C 东西。有谁知道出了什么问题?

如果重要的话,我想我正在使用 Linux。

0 投票
1 回答
1773 浏览

c - recvfrom:资源暂时不可用。为什么?

我多次运行这段代码(对于UDP 套接字recvfrom上的非阻塞):

有时程序停止,我收到以下错误perror

recvfrom:资源暂时不可用

可能是什么问题?

0 投票
0 回答
237 浏览

c++ - Recvfrom windows 函数不接收来自操作系统的所有数据包

sendto我写了一个可以使用and发送和接收数据包的 c++ windows 进程(如果重要的话是 Win7)recvfrom,但不幸的是,并不是所有的数据包都是从套接字读取的。两台计算机都直接连接并双向传输 2000 个数据包(每秒 1 个数据包,每个 500 位),当我打开 WireShark 时,我可以看到 2000 个数据包到达了目的地,但由于某种原因,我的进程从套接字读取的数据更少超过 2000 个(约 1980 个数据包)。recvfrom只要进程处于活动状态,该函数就在运行的任务中。数据包到达目的地但我的进程没有收到它的原因可能是什么?我的代码是否存在问题或 recvfrom 存在已知问题,或者可能是因为它是 udp?没有涉及错误,这是代码的一部分:

更新:问题出在套接字配置上。当我打开它时,我使用了 1 秒的 setsockopt SO_RCVTIMO,将 1 更改为 100000 微秒,它解决了问题。