jjzjj

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# - 仅从特定适配器(例如 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

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

Windows 7 阻止 UDP 广播消息

我在我的Windows7机器上运行一个客户端应用程序,它向本地子网上的另一台服务器机器发送一条UDP消息,然后服务器回复一条目标为“192.168.1.255”的广播UDP消息。奇怪的是,我在Windows上的客户端应用程序无法获取消息。我试过让服务器直接向我的windows机器'192.168.1.8'的ip发送单播消息,然后客户端就可以得到它。我使用WireShark跟踪消息,我可以看到发送到“192.168.1.255”的IP数据包,但我的应用程序无法获取它。所以我相信Windows7会阻止子网络中的广播消息。我关闭了windows防火墙,但还是不行。我几乎可以肯定这是Windo

windows - 监听 UDP 多播数据包

我的AutoIt脚本应该接收发送到239.255.250.250:9131的UDP多播数据包.但它不起作用,我看不到指定UDPmulticastaddress的选项对于UDPBind().UDPBind()在下面的代码中返回error10049(invalidaddress):UDPStartup()UDPBind("239.255.250.250",9131)While1$msg=UDPRecv($recv,512)If$msg""ThenConsoleWrite($msg)EndIfSleep(100)WEnd如何监听UDP多播包? 最佳答案

windows - 使用临时端口的 Boost::asio UDP 广播

我在boost::asio下遇到了udp广播事务的问题,与以下代码片段有关。由于我尝试在这种情况下进行广播,因此deviceIP="255.255.255.255"。devicePort是我的设备指定的管理端口。我想使用一个临时本地端口,所以我更愿意在连接后尽可能不必使用socket.bind(),并且代码通过设置localPort=0支持单播。boost::asio::ip::address_v4targetIP=boost::asio::ip::address_v4::from_string(deviceIP);m_targetEndPoint=boost::asio::ip::u

c# - 如何从 C# udp 套接字异常中正常恢复

上下文:我正在将一个linuxperl应用程序移植到C#,服务器监听一个udp端口​​并通过单个udp套接字与远程客户端维护多个并发对话。在测试期间,我向udp服务器发送大量数据包,随机重启客户端以观察服务器注册新连接。问题是这样的:当我杀死一个udp客户端时,服务器上可能仍然有发往该客户端的数据。当服务器尝试发送此数据时,它会返回一条icmp“无可用服务”消息,因此套接字上会发生异常。我不能重用这个套接字,当我尝试将C#异步处理程序与套接字相关联时,它会提示异常,所以我必须关闭并重新打开服务器端口上的udp套接字。这是解决此问题的唯一方法吗?肯定有某种方法可以“修复”udp套接字,从

c# - 如何在 c# 中跨本地网络进行 UDP 多播?

我正在尝试在我的本地网络上进行一些简单的UDP通信。我想做的就是对网络上的所有机器进行多播这是我的发送代码publicvoidSendMessage(stringmessage){vardata=Encoding.Default.GetBytes(message);using(varudpClient=newUdpClient(AddressFamily.InterNetwork)){varaddress=IPAddress.Parse("224.100.0.1");varipEndPoint=newIPEndPoint(address,8088);udpClient.JoinMult