我正在使用 mono 来构建一个需要使用 UDP 发送和接收的 C# 程序。目前我的实现在 Windows 上按预期工作,但我在与我的 Ubuntu 或 Fedora 系统进行通信时遇到了问题。
Windows 可以广播和接收它自己的数据报。
Ubuntu 可以广播和接收它自己的数据报。它的广播被 Windows 接收,但它看不到 Windows 广播的数据报。
Fedora 可以广播但不能从任何地方(甚至它自己)接收数据报。它的广播被 Windows 接收。
当数据报无法到达任何一台 linux 机器时,'receive' 功能永远不会被触发。
这是我到目前为止所拥有的:
int _port = 4568;
var server = new UdpClient(_port);
var send_UDP = new UdpClient();
接收方法使用UDPClient的异步调用;
private static void receive()
{
server.BeginReceive(new AsyncCallback(receive), null);
}
private static void receive(IAsyncResult o)
{
try
{
// I'm told that port = 0 should receive from any port.
var sender = new IPEndPoint(IPAddress.Any, 0);
var data = server.EndReceive(o, ref sender);
receive();
var str = new string(Encoding.ASCII.GetChars(data));
postmessage(sender.Address.ToString() + ":" + sender.Port.ToString() + " > " + str);
}
catch {}
}
以及发送方法;
public static void send(string message)
{
var target = new IPEndPoint(IPAddress.Parse("255.255.255.255"), _port);
byte[] data = Encoding.ASCII.GetBytes(message);
send_UDP.Send(data, data.Length, target);
}
用 Fedora 做了一些测试,使用 255.255.255.255 广播似乎有问题。还有其他方法可以做到这一点吗?