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

android - Android - 在 recvfrom() 上不断收到分段错误

对于我在 BScEE 中的最后一个项目,我正在尝试创建一个 ad-hoc 网络。我正在开发 Galaxy S2 设备并用 C ( JNI ) 编写我的大部分代码。除了发送普通消息外,我还每 5 秒自动发送一次广播。有一个线程正在侦听并等待接收数据。由于分段错误,我一直崩溃 - 使用 ndk-stack 和 addr2line 它指向 recvfrom :我的 int retval = recvfrom(sockfd, buf, BUFLEN, 0, (struct sockaddr*)&cli_addr, &slen); 一个想法是,因为大多数时候有一个线程正在运行并等待接收,它是一个误报和分段问题在其他地方。

如何调试分段错误的原因,以及它是否实际上是由 recvfrom() 代码引起的。[如果有帮助,我可以在这里添加墓碑]

编辑 1:fadden 墓碑长 2700 行,我添加了开头和结尾。最后包含我们的应用程序,它指导我recvfrom。

墓碑的开头:

墓碑结束:

这是接收 JNI 函数:

}

感谢谁能在这里救我:(

0 投票
1 回答
787 浏览

c - 从 recvfrom() 缓冲区访问值

我遇到以下问题。特别是,我试图从传递给 recvfrom() 方法的缓冲区参数中提取一个 uint32_t 和一个 char* 。此时,可以使用以下代码正确提取整数:

但是,当我如上所示执行 printf 时,只有 recv_int 有值。recv_char 是一个空白字符串。但是,我最初将“Hello”存储在缓冲区中,因此应该将“Hello”打印到标准输出。

编辑:

这是在 sendto() 中使用的代码:

任何帮助,将不胜感激。

0 投票
1 回答
359 浏览

c - C recv 函数行为

这是我的两段代码:

服务器.c

客户端.c

在服务器端,为什么打印“test”的 printf 在客户端请求发送消息之前没有运行?打印“test2”的第二个 printf 也是如此。可能有一些概念让我无法理解!

如果我评论 recv ,则执行流程返回正常。

0 投票
1 回答
11549 浏览

c - 使用 C 进行套接字编程的 recvfrom

因此,当我遇到以下代码时,我试图理解 C 中的套接字编程:

似乎recvfrom()呼叫不需要IP地址来发送消息。查看手册页显示以下几行:

如果 src_addr 不为 NULL,且底层协议提供源地址,则填写此源地址。当 src_addr 为 NULL 时,不填写;在这种情况下,不使用 addrlen,也应该为 NULL。

所以我认为底层协议提供了源IP地址。我的问题是,它如何真正确定接收消息的地址?是不是,一旦你向一个地址发送消息,你就不能使用同一个套接字向其他地址发送消息?所以它继续使用相同的地址?

请帮忙。在 Google 或任何讲义中都找不到答案。

先感谢您。

0 投票
0 回答
477 浏览

python - 如何在 recvfrom 中设置数据包大小

使用 recvfrom() 时如何设置数据包大小?

我正在尝试使用 Raspberry Pi Model B 捕获 tcp 数据包。我有一个 python 程序,它使用 recvfrom 捕获数据包并将它们写入 .dat 文件。为了与我为后处理数据编写的 matlab 代码兼容。我需要文件的大小(字节)除以数据包大小(在本例中为 8568 字节)时产生一个整数值。这可能吗?如果是这样,我该怎么做?

此外,每次运行代码时,我都必须关闭并重新启动 tcp 源,以使 recvfrom 函数正常工作。我想让这个停止,我需要在代码的开头或结尾添加一个命令来清除端口吗?

f.close() s.close()

0 投票
1 回答
56 浏览

udp - UDP消息大小差异

假设 A 向 B 发送一个大小为 N 的 UDP 消息,例如

现在 B 收到这条消息,期望它的大小为 N_1

当 N_1!=N 时会发生什么?

0 投票
3 回答
793 浏览

c - C: UDP 数据包的最后一个字节丢失

我正在编写一个基于 UDP 的流媒体服务器,遇到了一个奇怪的问题,我确信这只是一个简单的错误,但我找不到解决方案。服务器执行以下操作:

这似乎有效。我可以解码它并且数据没有损坏。但是,我编写了一个可以工作(或者更确切地说:不工作)的测试客户端,如下所示:

现在到我的问题。当我用 以十六进制检查测试文件时diff <(xxd test_before) <(xxd test_after),我得到了这个(示例差异行):

这意味着数据包数据的最后 12 个字节丢失了。其他一切都很好。

这只是测试代码,所以它并不重要(我猜),但它很奇怪,我想知道为什么。

有任何想法吗?

编辑:

我现在已经从答案中尝试了一些方法,到目前为止还没有得到任何结果。我会继续努力。

编辑2:

该代码适用于不同的机器。我不确定问题是什么,但它似乎对除我以外的任何人都有效。很抱歉占用了您的时间,并感谢您对如何改进代码等提出的所有友好建议!

在此先感谢,卡森

0 投票
1 回答
1152 浏览

c - 在 C 中的 POSIX 线程中使用时,recvfrom() 会给出错误的文件描述符错误

我正在实现一个迷你 youtube 类的套接字接口。当从线程 main_server 中的子服务器接收数据时出现问题,该线程可以轻松处理多个子服务器。如果我在 main 中创建线程后通过 pthread_join 加入线程,则线程调用成功并且从子服务器接收数据,但这在技术上破坏了创建多线程子服务器环境的全部意义。如果我不加入线程,这就是错误的来源:

当我通过 pthread_join 加入线程时,执行成功并且从子服务器成功接收到数据。这是终端上显示的内容。

我的主服务器代码如下。

我的子服务器代码如下:

我现在被困了很长一段时间,我似乎无法弄清楚问题是什么。任何帮助将不胜感激!

0 投票
1 回答
1099 浏览

rust - UdpSocket.recv_from 因“文件结尾”而失败,但我可以在 Wireshark 中看到传入的包

编者注:此代码示例来自 Rust 1.0 之前的版本,不是有效的 Rust 1.0 代码。问题中讨论的概念仍然有效。

我正在尝试使用 Rust 进行 torrent 抓取。我可以在 Wireshark 中看到传入的包,但我的recv_from电话总是返回Error("End of file")。这是我的程序:

输出总是:

但是,我可以在 Wireshark 中看到预期的响应:

这个包有一个 16 字节的有效载荷,这正是我所期望的。怎么了?

0 投票
0 回答
515 浏览

c - recvfrom 多次读取同一帧

我正在玩 STP 数据包并编写程序原始套接字来修改它们。从 eth0 读取发送到 eth1。系统是 ubuntu 14.10/ Kernel 3.something。使用 Karat 的其他计算机生成数据包,Wireshark 也在运行此接口。注入一个数据包,第一次运行 recvfrom 后没有停止。从 eth0 读取相同的数据包并将其发送到 eth1。调试会话??????? 最终版本应该从 eth0 读取所有帧,转发所有并将所有 STP 放入“单播隧道”中 - 读取所有 eth1 帧和转发 eth0 并“解包”特殊的“隧道”帧。

我在这里放了一些代码: