public virtual void setTimeToLive(int arg0)
{
global::MonoJavaBridge.JavaBridge.CallVoidMethod(this, global::java.net.MulticastSocket.staticClass, "setTimeToLive", "(I)V", ref global::java.net.MulticastSocket._m4, global::MonoJavaBridge.JavaBridge.ConvertToValue(arg0));
}
public AndroidApplicationWebServiceMulticast() { AtData += AndroidApplicationWebServiceMulticast_AtData; new Thread( delegate() { // http://stackoverflow.com/questions/12610415/multicast-receiver-malfunction // http://answers.unity3d.com/questions/250732/android-build-is-not-receiving-udp-broadcasts.html // Acquire multicast lock wifi = (WifiManager) ScriptCoreLib.Android.ThreadLocalContextReference.CurrentContext.getSystemService(Context.WIFI_SERVICE); multicastLock = wifi.createMulticastLock("multicastLock"); //multicastLock.setReferenceCounted(true); multicastLock.acquire(); System.Console.WriteLine("LANBroadcastListener ready..."); try { byte[] b = new byte[0x100]; // https://code.google.com/p/android/issues/detail?id=40003 MulticastSocket socket = new MulticastSocket(40404); // must bind receive side socket.setBroadcast(true); socket.setReuseAddress(true); socket.setTimeToLive(30); socket.setReceiveBufferSize(0x100); socket.joinGroup(InetAddress.getByName("239.1.2.3")); System.Console.WriteLine("LANBroadcastListener joinGroup..."); while (true) { DatagramPacket dgram = new DatagramPacket((sbyte[])(object)b, b.Length); socket.receive(dgram); // blocks until a datagram is received var bytes = new MemoryStream((byte[])(object)dgram.getData(), 0, dgram.getLength()); var listen = Encoding.UTF8.GetString(bytes.ToArray()); //dgram.setLength(b.Length); // must reset length field!s if (AtData != null) AtData(listen); } } catch { System.Console.WriteLine("client error"); } } ) { Name = "client" }.Start(); }