ATT*_*ATT 6 c# udpclient asp.net-core .net-standard-2.0
我有一个程序来发现网络上的客户端,负责发现的类库是.net standard 2. 它在 Windows 机器上运行良好,但现在我需要在 linux 上运行它,而我的 UdpClient 没有收到消息,即使很困难,我确实看到它们从 linux 机器上的 tcpdump 客户端发送到正确的地址,这意味着他们确实得到了发现消息并回复它,它只是在代码中没有到达我的 UdpClient.Receive 方法。
private bool Start(IPEndPoint localEP, IPEndPoint remoteEP)
{
try
{
MulticastOption mcastOption = new MulticastOption(remoteEP.Address, localEP.Address);
List<byte> msg = new List<byte>();
// message type: Discovery
byte[] discoveryMessage = CreateDiscoveryMessage();
UdpClient managerClient = new UdpClient(localEP);
managerClient.Client.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.AddMembership,
mcastOption);
managerClient.Client.SetSocketOption(SocketOptionLevel.IP,
SocketOptionName.MulticastLoopback,
0);
Task.Run(() =>
{
while (!_token.IsCancellationRequested)
{
IPEndPoint ep = new IPEndPoint(IPAddress.Any, 0);
// Receive solicitation message
byte[] ret = managerClient.Receive(ref ep);
Console.WriteLine($"Message recieved from {ep.Address.ToString()}");
}
});
Task.Run(() =>
{
while (!_token.IsCancellationRequested)
{
// Send discovery message
// Send discovery message_
managerClient.Send(discoveryMessage, discoveryMessage.Length, remoteEP);
Console.WriteLine("Message sent");
// wait 10 secs
Thread.Sleep(10000);
}
});
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
Console.WriteLine(e.StackTrace);
return false;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
169 次 |
| 最近记录: |