问题标签 [udpclient]

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 回答
1630 浏览

.net - 如何通过 UDP 发送实时数据?

我必须尽可能快速和实时地通过 UDP 发送一系列视频帧,当我掌握了基础知识时,我遇到了各种各样的困难。我的一些目标:

  1. 数据通常通过拨号发送(因此是 UDP 而不是 TCP),但还需要支持快速以太网。

  2. 偶尔丢帧是可以的(因此使用 UDP 而不是 TCP)。

  3. 需要低延迟。远程接收的帧应该是最近发送的帧(在缓冲区中等待的帧不超过几帧)。

  4. 我需要能够检测有效带宽,以便我可以或多或少地压缩帧以保持帧速率。

我已经设法实现了大部分部分:

  1. 我将帧数据分解为一个或多个大约 500 字节的数据报,每个数据报都有一个序列号和其他信息。接收器重新组合整个帧并检测是否有任何数据报丢失。

  2. 如果接收方检测到超过一定百分比的丢帧(例如,过去 10 帧中的 50%),我会向发送方发送一条 TCP 消息以减慢 50%。发送者在随后的每一帧中缓慢地将速度提高 5%。

  3. 使用 System.Net.Sockets.UdpClient 发送和接收数据。

  4. 我有一个单独的 TCP 通道,用于控制返回给发送者的消息。

我现在的主要困难是检测有效带宽和处理延迟,尤其是在拨号时(最大约 4,000 字节/秒)。例如,如果我尝试使用 TcpClient.Send() 发送 100,000 字节/秒,它们似乎都到达(没有丢弃的数据报),但在最后一个数据报到达时延迟很大。我认为 TcpClient.Send() 函数会阻塞,直到缓冲区能够发送这弄乱了我当前的算法。

任何人都可以向我指出任何信息来源,以了解如何:

  1. 检测 UDP 上的实际带宽。

  2. 用于动态调整带宽以适应可用管道的更好算法。

  3. 以所需带宽平稳发送数据。

  4. 一种检测延迟并将延迟降至最低的方法。

上周我一直在转动我的轮子,每次我解决一个问题时,似乎另一个问题就会抬头。

0 投票
2 回答
6174 浏览

delphi - 处理 TUdpSocket

我正在尝试在 Delphi 中使用 TUdpSocket。我想要做的是连接到 UDP 服务器,发送一些数据并等待应答。数据发送正确,但控件没有收到任何东西。我不知道为什么。我已经为这个问题苦苦挣扎了好几个小时了,我要放弃了:-(。

我尝试使用 TIdUDPClient,但情况是一样的。数据发送正确,但没有收到。

只有 TIdUDPServer 或多或少地正常工作,因为它既发送数据又接收数据。不幸的是,数据接收由一个单独的线程(主线程或其他线程,取决于 ThreadedEvent 属性)处理,这迫使我使用同步并使整个代码复杂化。我想在我自己的线程中处理 UDP 连接。只需发送一些数据并调用 WaitForData() 来等待答案,然后在同一个线程中处理它。

如果可能的话,我不想使用任何第三方控件,但如果这是唯一的解决方案,我接受它。

非常感谢您提前提供的帮助。

- - 例子 - -

i) TUDPSocket:

如您所见,控件应该接收它传输的数据。显然它确实如此,因为在调用 Select() 方法后 lR 的计算结果为 true。但是 Receiveln() 返回一个空字符串,就像 ReceiveBuf() 一样。当我启动一个 UDP 服务器并向它发送一些数据时,它会被正确接收,所以我确定数据真的被发送了。

0 投票
2 回答
1179 浏览

c# - 从 C# 获取 DHCPINFORM 消息响应时出现问题

我正在开发一个应用程序,我想在其中通过 DHCP 服务器提取一些信息。所以我在端口 67 UDP 广播上发送一个 DHCPINFORM 数据包。我面临的问题是我一直没有收到响应,即 DHCPACK 或来自 DHCP 服务器的任何其他消息,这意味着有时它会立即发送回一个 DHCPACK 数据包,有时根本没有,这可能是什么原因造成的?

这是我的网络配置我的 IP:192.168.3.31 DHCP 服务器位于:192.168.3.108

我正在使用的 C# 代码是

请帮帮我?

0 投票
2 回答
6520 浏览

c# - C# UdpClient 服务器和客户端问题

这是我的服务器代码

这是我的客户代码

根据我的客户端和服务器,客户端是向服务器发送数据的那个。

但我的要求是相反的!我无法做到这一点..当我尝试将此代码添加到服务器时

我得到一个例外The operation is not allowed on non-connected sockets.

有人能帮我吗?

0 投票
3 回答
12923 浏览

c# - 如何知道c#UdpClient使用的端口号?

我正在使用 c sharp 创建一个客户端服务器应用程序。服务器正在使用具有固定端口号的 tcplistener。客户端使用 tcpclient 连接到服务器。连接后,客户端和服务器都使用此连接进行通信。然后应用程序创建新的 udp 连接以发送和接收消息。由于服务器假设接受来自单个客户端的多个连接,我必须区分每个连接与不同的端口。为了做到这一点,我必须首先 1. 在服务器上,创建一个 udpclient(在服务器上自动使用未使用的 udp 端口​​)。2.将服务器udpclient使用的端口号发送给客户端。3. 客户端使用指定的端口号向服务器发送数据。

问题是,如何创建一个可以知道使用的端口号的 udpclient?

0 投票
5 回答
25286 浏览

c# - 如何在循环中使用 UdpClient.BeginReceive

我想做这个

UdpClient.Receive我必须使用 ,而不是使用UdpClient.BeginReceive。问题是,我该怎么做?使用BeginReceive的示例并不多,而且 MSDN 示例根本没有帮助。我应该使用BeginReceive,还是只在单独的线程下创建它?

我一直得到ObjectDisposedException例外。我只收到发送的第一个数据。下一个数据将抛出异常。

是什么赋予了?

顺便说一下,总体思路是:

  1. 创建 tcpclient 管理器。
  2. 使用 udpclient 开始发送/接收数据。
  3. 当所有数据都发送完毕后,tcpclient 管理器将向接收者发出所有数据已发送的信号,并且应该关闭 udpclient 连接。
0 投票
2 回答
3121 浏览

c - UDP 套接字的发送方 IP/端口

是否可以使用 C 套接字获取发送方 IP 和(动态获取的)端口?我有以下内容:

这几乎是从指南中获取的(尽管我有点明白?)。但我无法确定我将使用哪些信息来查找客户数据。

任何和所有的帮助表示赞赏,谢谢!

0 投票
2 回答
8137 浏览

c# - C# UDP 套接字绑定异常

我正在尝试为无线网状网络创建一个程序(除了名称之外的所有内容)。大多数网络将处理 TCP 消息传递,但要确定所有邻居 IP(因为它们在启动时将是未知的),我选择使用 UDP 广播作为初始发现消息。在大多数情况下,该代码是无关紧要的,因为初始测试似乎有效,目前我不调用它。

以下是接收和注册邻居IP的部分。

我已经使用两个 IPEndPoints 进行了测试,无论我如何设置它,绑定都会失败,并出现 SocketException.ErrorCode 10022 Windows Socket Error Codes。这是一个无效的参数,但我对这意味着什么感到困惑,因为所需的参数是一个端点。

这在第一次运行时失败,所以它不像我试图重新绑定端口。

0 投票
1 回答
2586 浏览

c# - udpclient 本地端点、远程端点。那什么意识?

如何为 udpclient 指定特定的 ipaddress:port 接收?我对 updclient.client.localendpoint 和 udpclient.client.remoteendpoint 感到困惑。我在想可能是它的远程端点,但我无法显示远程端点值。加上我的本地端点 ip 是 0.0.0.0。那什么意识?

0 投票
2 回答
3240 浏览

c# - 是否可以在 C# 中设置 UdpClient ReceiveBufferSize 属性?

我想更改 udpclient receivebuffersize 以防止在接收 udp 数据包时缓冲区溢出。是否可以在 c# 中更改它。实际属性是 UdpClient.Client.ReceiveBufferSize。我必须使用其他方法吗?

谢谢。