我正在使用mono编写一个需要使用UDP发送和接收数据的C#程序。目前,我的实现在Windows上按预期工作,但是我在Ubuntu或Fedora系统中无法正常通信。
Windows可以广播和接收自己的数据报。
Ubuntu可以广播和接收自己的数据报,但是它不能看到Windows广播的数据报。
Fedora可以广播,但是无法从任何地方(甚至是自己)接收数据报,其广播可以被Windows接收。
当数据报未能到达Linux机器之一时,“接收”功能从未触发。
这是我到目前为止做到的:
int _port = 4568;
var server = new UdpClient(_port);
var send_UDP = new UdpClient();
receive方法使用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 存在问题。是否有其他方法可以实现广播呢?
try-catch
来查看是否有运行时错误吗?你设置了receive
断点来检查是否被调用了吗? - Some programmer dude