【发布时间】:2015-06-18 23:11:03
【问题描述】:
所以我有 2 个 C# 应用程序在同一台机器上运行。它们通过 UDPClient 进行通信(一个应用程序打开流并将其设置如下:
udp1Server.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
另一个应用程序可以以可接受的速率连接和传递消息,唯一的问题是在另一个应用程序接收之前可能会有半秒的轻微延迟。
看到这些是在同一台机器上通信的消息,应该几乎没有延迟吧?
有趣的是,消息实际上是从智能手机通过蓝牙发送到应用 1,然后通过 udp 发送到应用 2。蓝牙流比同一台机器上的两个应用之间的通信更快?!
这是发送数据的应用程序:
static void UnityThread()
{
try
{
while (true)
{
if (bluetoothClients[0].Connected)
{
byte[] sendBuf = Encoding.ASCII.GetBytes(latestData[0]);
udp1Server.Send(sendBuf, sendBuf.Length);
}
Thread.Sleep(1);
}
}
catch (SocketException e) { }
}
这是接收数据的应用程序:
void ConsoleThread(){
while (!_isQuitting)
{
try
{
byte[] receiveBytes = udp1Server.Receive(ref localpt1);
string returnData = Encoding.ASCII.GetString(receiveBytes);
udpLastValue = returnData;
}
catch (Exception e)
{
print("errir in UDP1 " + e.ToString());
}
Thread.Sleep(1);
}
}
非常感谢
【问题讨论】:
-
你的代码有bug,把代码贴出来。此外,UDP 没有“流”。此外,即使在本地机器上,您也可能会遇到丢包的情况。
-
@usr 感谢您的关注。代码已发布
-
我预计这里会有 30 毫秒的延迟。 Sleep(1) 通常四舍五入到 15 毫秒。您如何阅读 udpLastValue 并显示它?可能会有延迟。
-
问题是接收器的睡眠。我想在那里睡觉是没有意义的,因为无论如何发送速率都是有上限的。
标签: c# performance udp