问题标签 [sendto]
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.
c++ - 如何使用 sendto() 发送结构
我创建了结构:
现在要使用 sendto 方法发送此结构,我正在对结构进行类型转换并将其发送回,如下所示:
但是,当我铸造我的 Struct ti 时char*
,实际数据正在丢失它的值,而在调试时,我看到 sendbuf 包含一些其他值。
有人可以告诉我如何使用 sendto 发送上述结构吗?
c - 原始套接字 sendto 在 Linux 上使用 C 失败
我正在尝试使用 UDP 发送一个原始数据包,其中包含我在代码中构建的 IP 和 UDP 标头。使用 .成功初始化原始数据包socket(PF_INET, SOCK_RAW, IPPROTO_UDP)
并设置套接字选项setsockopt(sd, IPPROTO_IP, IP_HDRINCL, val, sizeof(int))
。
问题是当我使用 发送数据包时sendto()
,我收到错误消息“消息太长”。
我的 IP 头是 20 个字节,UDP 头是 8 个字节,我的数据是 12 个字节。所以总共只有40个字节。对于单个 UDP 数据包,这不可能太长。有人可以帮忙吗?
的类型val
是指向int
这是我的代码:
sockets - sendto 在 VxWorks 上不起作用
我之前问过这个问题并且没有解决方案(仍然有问题)。我被难住了,因为函数返回没有错误并且没有发送数据!此代码适用于 Linux ... VxWorks 版本不起作用(sendto 不发送,尽管它返回时没有错误)。
概要 - 我正在编写一个简单的回显服务器 - 服务器成功接收数据(来自 x86 机器)并声称它已成功将其发回。但是客户端上没有收到数据(x86 上的 netcat)。此代码在 PowerPC 机器上的 VxWorks 5.4 上运行...
我是否以某种方式缓冲了 UDP 数据?
另一个任务会阻止 sendto 发送吗?(不要在这里疯狂追逐,但我以正常优先级执行我的应用程序,即低于网络任务等关键任务......所以这很好)。
VxWorks 可以缓冲我的 UDP 数据吗?
我已经设置了我的路由表... ping 正常!
没有防火墙AFAIK ...
sendto 的细微差别是什么,什么会阻止我的数据到达客户端......
c - 套接字编程:sendto 总是以 errno 22 (EINVAL) 失败
我总是没有发送任何字节,此代码的 errno 为 22(EINVAL,无效参数)。设置在destination_host
其他地方并且已知是有效的,所以我真的不明白发生了什么。 MAXMSGSIZE
是 1000。没有错误或警告。我正在编译-Wall -Werror -pedantic
network-programming - 是什么导致udp接收延迟?
我注意到,当我从 udp 套接字以均匀的间隔发送数据包时,发送的第一个数据包似乎被延迟了。例如,如果我每 100 毫秒发送一次数据包,我发现在我的网络上接收数据包之间的延迟呈正态分布,平均为 100 毫秒,平均标准差为 4。但是,第一个和第二个数据包的接收时间之间的差距通常在 10 到 40 毫秒左右 - 正如您所看到的,这显然是一个统计学上的显着差异,所以我的问题是,是什么原因造成的?
我在 Linux 上使用 C 中的 sendto 函数。有人建议延迟可能是由于 arp 解析阻止数据包被发送,直到目标 ip 被转换为 mac 地址 - 这可能吗?如果我重新启动发送程序,第一个数据包再次花费太长时间,并且延迟不一致 - 10 到 40 毫秒是一个相当大的范围。
我需要找出为什么第一个数据包花费的时间太长,以及如何解决它。
编辑:对 pcap 的进一步分析表明发送程序以正确的间隔发送数据包。问题一定出在接收器上,它使用 select() 等待可读套接字,然后调用 recvfrom 并打印数据包。那里有某种我可能不知道的缓冲吗?
sockets - 消息可以在调用 sendto() 和发送网卡之间消失而不通知调用者吗?
我使用 sendto() 将数据报(6740 字节)发送到同一 LAN 上的另一台主机。往往没有问题,对方主机拿到了数据报。但有时数据报消失了,它永远不会到达本地网络接口,我在wireshark中看到过。但是sendto() 函数并不表示任何问题(即返回-1)。它返回6740。我也用strace查看过,一切似乎都很好。sendto()怎么会说一切正常,但接口上什么也没发送?我正在使用 ubuntu 10.04 和普通的 c 函数sendto()
(但通过 ACE 库)。我该如何进一步调查?主要问题可能是:在调用 sendto() 和发送网卡之间,消息是否会在不通知调用者的情况下消失?
c - C sendto 有时会工作...只是在一段时间后停止...没有错误
我用 C 中的 sendto 函数得到了奇怪的结果。(LINUX)我想做的是实现一种可靠的 UDP 方案。
下面提供的代码片段是计时器的一部分,它在丢弃数据包时到期,并向进程发送消息以重新传输该数据包。
我遇到的奇怪问题是,当传输一个大文件时说......> 300KB 下面给出的代码完美运行(即执行其他部分)但是在发送了一定数量的数据包之后......它执行然后部分。!!!
这很奇怪,因为该代码适用于大约 250 个数据包,但使用 251 个数据包 kabooom !!!
请帮忙!!!!提前致谢
c - sendto : 资源暂时不可用 (errno 11)
我在使用 sendto 时遇到问题。
我有一个接收者使用recvfrom 接收UPD 数据包,然后使用sendto 回复发送者。
不幸的是,我收到 errno 11(资源暂时不可用)。我正在使用两个插座。
第一个数据包实际上是发送的,但不是之后的:
发送到 :: 成功
错误:0。
sendto :: 资源暂时不可用
错误:11。
sendto :: 资源暂时不可用
...
这是我的代码的摘录:
在 SIGIO 处理程序中:
这个问题会不会是因为端口仍然很热,我需要等待才能重用它?我试图改变端口,但它没有帮助。
更新:如果 sleep(1) 被注释掉,那么数据包实际上会被发送!
非常感谢你的帮助。
linux - Linux 多播 sendto() 性能因本地侦听器而降低
我们有一个“发布者”应用程序,它使用多播发送数据。该应用程序对性能极为敏感(我们正在微秒级别进行优化)。侦听此已发布数据的应用程序可以(并且通常)与发布应用程序在同一台机器上。
我们最近注意到一个有趣的现象:执行 sendto() 的时间与机器上的侦听器数量成正比增加。
例如,假设没有侦听器,我们的 sendto() 调用的基本时间是 5 微秒。每个额外的侦听器都会将 sendto() 调用的时间增加大约 2 微秒。所以如果我们有 10 个监听器,现在 sendto() 调用需要 2*10+5 = 25 微秒。
这对我来说表明 sendto() 调用会阻塞,直到数据被复制到每个侦听器。
聆听方面的分析也支持这一点。如果有 10 个侦听器,每个侦听器都会比前一个侦听器晚两微秒接收数据。(即第一个监听器在大约 5 微秒内获取数据,最后一个监听器在大约 23--25 微秒内获取数据。)
有没有办法在程序级别或系统级别改变这种行为?类似于非阻塞/异步 sendto() 调用?或者至少阻塞直到消息被复制到内核的内存中,这样它就可以在不等待所有侦听器的情况下返回)?
c# - 循环中的 C# Socket.SendTo 最终导致 SocketException(取决于路由器)
我正在做一些基本的 Socket 消息传递。我有一个运行良好的例程,但在负载下存在问题。
我正在使用 UDP 来执行无连接的 SendTo,以基本上执行类似 ping 的操作,以查看我的任何侦听器是否在 LAN 上。理想情况下,我只使用广播地址,但无线路由器似乎没有中继我的广播。我的工作是遍历子网上的所有 IP 并将我的数据报发送到每个 IP。其他 PC 正在监听,如果他们收到消息,他们会回复,这就是我让 Peers 找到彼此的方式。这是循环中的代码,它将数据报发送到子网中的每个 IP。
这可行,但是当子网范围很大时,比如 255.255.0.0(意味着要迭代约 60,000 个 IP),我最终会得到一个带有错误代码“10022”的 SocketException,意思是“无效参数”。这往往发生在大约 10,000 次成功发送之后,然后我开始看到这个错误。此外,我在工作中使用的路由器可以处理它,并且可能是一个高功率路由器,但我实验室中的廉价路由器是产生错误的路由器。
如果我在捕获 SocketException 之后并在恢复循环之前放入等待时间,它通常会恢复,但最终我会再次收到错误。
我认为正在发生的事情是路由器上的缓冲区已满,我无法再发送数据。工作中质量较高的人可以处理它,但便宜的人会陷入困境。这听起来合理吗?
几个问题:
1) 当以无连接方式使用 SendTo 时,我需要在我的 Socket 上调用 Close() 吗?
我没有看到调用 Close() 有什么好处,但是当我调用 Close() 时,它会严重减慢我的迭代速度(我在上面注释掉了它,因为它确实减慢了很多速度)。这有意义吗?
2) 有没有办法告诉我在尝试发送更多数据之前应该等待?仅仅捕获异常似乎是不对的,我仍然不知道它的原因是什么。
谢谢,J。