私は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();
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 {}
}
そして、sendメソッド。
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を使用してブロードキャストすることに問題があるようです。これを行う他の方法はありますか?