草庐IT

windows - udp丢包

我有一个程序使用UDP将数据从一台电脑发送到另一台电脑(数据大小为150字节)。那程序是用delphi7编写的(TldUDPClient和TldUDPServer组件使用发送和接收数据)。我需要在30%的丢包率上测试这个程序。我在Windows上使用ipfw(从sourceforge下载):ipfw-fflushipfwaddpipe1ipfromanytoanyoutipfwpipe1configplr0.3当我使用ping时,我发现有30%的数据丢失。当我启动我的delphi程序时,经过一段时间后它返回一个错误:套接字错误10004。错误的描述是:函数调用中断。调用WSACance

windows - 多宿主系统上的 UDP 广播

我正在从事一个使用UDP广播发现/配置远程设备的项目。这些设备可能还没有配置IP地址,至少没有匹配它们所连接的网络。目前,我们使用目标地址为255.255.255.255的单个sendto。这在大多数情况下工作正常,但在具有多个NIC的Vista机器上,广播似乎只从其中一个接口(interface)发出。如何让Vista向所有接口(interface)发送广播? 最佳答案 我个人从未见过任何系统为每个接口(interface)生成数据包以响应单个sendto调用。更好的选择是枚举网络接口(interface),确定正确的链路本地广播

windows - Windows 中的 SO_REUSEADDR 和 UDP 行为

我知道在*NIX环境中将SO_REUSEADDR与UDP一起使用,其行为类似于多播,其中绑定(bind)到同一端口的多个客户端可以同时收听和接收广播数据报。这也是Windows上的行为吗? 最佳答案 绑定(bind)到同一端口的Windows上的多个UDP套接字将一起接收广播数据包。这是一个演示程序,您可以使用GCC为Windows和Linux构建并使用Netcat进行测试,如前所述。在这两个系统中,当使用单播地址作为目标时,只有一个套接字(A或B)接收每个数据报。如果使用广播地址,那么两个套接字都会收到消息。/*Testedonl

c++ - UDP - 微爆期间丢失的数据

下面的代码在99.9的时间内运行良好(即不会丢失消息)。但是,当数据报之间以2-3微秒的速率出现微突发数据报时,我就会遇到数据丢失的情况。boostnotify_one()成员调用需要5到10微秒才能完成,因此这本身就是这些条件下的关键瓶颈。关于如何boost性能有什么建议吗?接收者/“生产者”代码线程:if(bytes_recvd>0){InQ.mut.lock();stringt;t.append(data_,bytes_recvd);InQ.msg_queue.push(t);//消费者代码线程://snip......std::strings;while(1){InQ.mut.

windows - 如何在多个程序中接收相同的 udp-stream?

我有一个封闭的第三方系统,它发送一个单播UDP流(MPEG-TS),我想在同一台计算机上的两个不同程序中访问它。我不能更改源上的任何内容,甚至不能更改IP或端口。除了编写我自己的捕获流然后创建新流并重新发送这两个流的小程序之外,还有其他选择吗?似乎两个目标程序中只有一个处理多播,所以我需要两个单播流。 最佳答案 您应该能够使用socat将单播UDP转发到多播组,或者只是将数据保存到文件中并稍后处理。编辑0:这是一个例子(这是在Linux上——没有任何Windows机器)。在单播端口4242上监听,转发到多播224.10.10.10:

c - sethostname identifier not found 错误

我想设置本地主机的名称。我正在使用sethostname()函数,但出现如下错误:errorC3861:'sethostname':identifiernotfound.下面是代码片段:WSADATAwsa;///Initialisewinsock///if(WSAStartup(MAKEWORD(2,2),&wsa)!=0){//SocketInitializationFailed///exit(EXIT_FAILURE);}charsetname[128]="Ayesha-PC";sethostname(setname,sizeof(setname));

c# - 仅从特定适配器(例如 192.168.101.1)发送 UDP 广播(255.255.255.255);在 Windows 上

适用于WindowsXP或更高版本的解决方案。最好使用C#或C++。我们不想使用子网定向广播(例如192.168.101.255)进行广播,因为我们尝试联系的设备没有对此做出响应。相反,我们希望能够仅从特定NIC/IP地址发送目标为255.255.255.255的UDP数据报,这样广播就不会在其他NIC上发送。这意味着我们必须绕过IP堆栈,这就是问题所在。我们如何绕过Windows上的IP堆栈,仅从特定的NIC/MAC地址发送符合UDP/IP的数据报? 最佳答案 只需将套接字bind()到所需的接口(interface)而不是使用I

linux - 阻塞套接字和非阻塞套接字有什么区别? (对于 realz 版)

在大家将此标记为重复之前,让我声明我知道我在网络编程方面的公平份额,这个问题是我试图解决一些即使在找到“解决方案”之后仍让我感到困惑的问题。设置过去几周我一直在编写一些胶水代码,以将大型工业系统整合到我们当前的设置中。该系统由WindowsXP计算机(PCA)控制,该计算机由Ubuntu14.04系统(PCB)通过发送稳定的2000HzUDP数据包流来控制。它使用包含系统当前状态的UDP数据包进行响应。注意确保保持2000Hz的频率,因为有3毫秒的超时,之后系统出现故障并返回安全状态。这涉及测量和解释std::this_thread::sleep_for中的错误。测量表明与目标速率的偏

windows - 在 Windows 10 中发送常规 UDP 数据包

我目前在这里有一个让我发疯的效果。我在家里的本地网络中有一个Windows10PC系统(典型的192.168.178.X网络,使用Fritzbox作为DNS和网关)一切运行良好。WindowsPC可以连接到互联网,我可以在互联网上浏览、玩游戏等。现在我正在玩一个通过WLAN连接到Fritzbox的小设备(ESP8266和一个OLED),而我的WindowsPC通过电缆连接。设备应接收UDP消息(无广播,直接)并将其显示在其OLED上。我对设备进行了编程并启动它,然后使用商店中的一些UDP测试器应用程序通过我的android手机(也在通过无线网络中)进行测试。每个UDP数据包都被完美地接

windows - 如何在 Windows XP 中监视 UDP 缓冲区

我正在尝试优化基于UDP的大型系统中的通信。通过优化,我的意思是尽量减少数据包的丢失。(是的,我知道UDP的固有局限性,不建议使用其他协议(protocol))我们有几个.exe,每个都有几个线程,并使用setsockoptwithSO_SNDBUF&SO_RCVBUFtoincreasetobufers.我们经历过为许多套接字设置非常大的缓冲区会降低整体性能(更多的数据包丢失)但是如何监控这些增加的缓冲区大小的影响呢?.特别是在接收端,我想看看是否有任何端口收到的消息由于缺少缓冲区而被丢弃。请建议如何做到这一点,(用户或内核模式下的Windbg,特殊程序,自知之明)编辑:@EdChu