Premesso che é la prima volta che provo il socket UDP. Raccogliendo un ispirazione da un POST di Erel che parla di un server MQTT che invia l'indirizzo IP con un ping nella rete con protocollo UDP.
Ho cercato di implementare un service che ogni 30 secondi invia un PING alla rete con l'indirizzo del server, in modo che i client si possano agganciare. Cosa ho sbagliato?
N.B. GetBroadcastAddress l'ha postato Erel in un suo Post io ho solo ricopiato, quindi sarà corretto, e serve a trovare l'indirizzo BroadCasting della rete.
Ho cercato di implementare un service che ogni 30 secondi invia un PING alla rete con l'indirizzo del server, in modo che i client si possano agganciare. Cosa ho sbagliato?
N.B. GetBroadcastAddress l'ha postato Erel in un suo Post io ho solo ricopiato, quindi sarà corretto, e serve a trovare l'indirizzo BroadCasting della rete.
B4X:
Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim PingServer As UDPSocket
Dim IP As ServerSocket
End Sub
Sub Service_Create
PingServer.Initialize("PingServer",1010,200)
IP.Initialize(1010, "IP")
End Sub
Sub Service_Start (StartingIntent As Intent)
Dim Packet As UDPPacket
Packet.Initialize(IP.GetMyWifiIP.GetBytes("UTF8"), GetBroadcastAddress, 1010)
PingServer.Send(Packet)
End Sub
Sub Service_Destroy
StartServiceAt(Me,DateTime.Now+DateTime.TicksPerSecond*30,False)
End Sub
Sub UDP_PacketArrived (Packet As UDPPacket)
Log(BytesToString(Packet.Data,0,Packet.Data.Length,"UTF-8"))
End Sub
Sub GetBroadcastAddress As String
Dim niIterator As JavaObject
niIterator = niIterator.InitializeStatic("java.net.NetworkInterface").RunMethod("getNetworkInterfaces", Null)
Do While niIterator.RunMethod("hasMoreElements", Null)
Dim ni As JavaObject = niIterator.RunMethod("nextElement", Null)
If ni.RunMethod("isLoopback", Null) = False Then
Dim addresses As List = ni.RunMethod("getInterfaceAddresses", Null)
For Each ia As JavaObject In addresses
Dim broadcast As Object = ia.RunMethod("getBroadcast", Null)
If broadcast <> Null Then
Dim b As String = broadcast
Return b.SubString(1)
End If
Next
End If
Loop
Return ""
End Sub