'Non-UI application (console / server application)
#Region Project Attributes
#CommandLineArgs:
#MergeLibraries: True
#End Region
Sub Process_Globals
Dim muCastSock As UDPSocket
'Dim muPacket As UDPPacket
Private eotTimer As Timer
Public firstTime As Long
Public muAddr As String = "224.2.2.3"
'Public muAddr As String = "230.0.0.3"
Public muPort As Int = 8888
'Public muPort As Int = 9901
Private mymsg As String = "End of Multicast Listener"
Public messaggio As String
Public sResult As String
Public tstart As Long
Public tend As Long
Public lapsed As Double
Public myTime As String
Public t1 As Long
Private speriod As Long
End Sub
Sub AppStart (Args() As String)
DateTime.DateFormat = "yyyy-MM-dd"
DateTime.TimeFormat = "HH:mm:ss.SSS"
tstart = DateTime.Now
'timePassato = CalcTimeLapsed(now, lapsed)
BloccoEx
Log("Control returned from blocking situation")
Log(" : " & mymsg)
'tstart = DateTime.Now
ExitApplication2(1)
'StartMessageLoop
End Sub
Sub InitializeWithIp(EventName As String, Port As Int, ip As String)
'Server.Initialize(0, EventName)
Dim multi As JavaObject
multi.InitializeNewInstance("java.net.MulticastSocket", Array(Port))
Dim myaddr As JavaObject
multi.RunMethod("joinGroup", Array(myaddr.InitializeStatic("java.net.InetAddress").RunMethod("getByName", Array(ip))))
Log("myAddr : " & ip)
Dim jo As JavaObject = Me
jo.RunMethod("SetMulticastSocket", Array(EventName, multi, muCastSock))
Log(" Info server : Starting Multicast server at ip " & ip & " port: " & Port )
'jo.RunMethod("rxPacket", Array(0, messaggio))
'jo.RunMethod("rxPacket", Array(0, jo.RunMethod("getByName",Array(messaggio))))
Log(" OK - Start of Multicast Listener")
Dim pkt As JavaObject = Me
'pkt.RunMethod("rxPacket", Array(messaggio))
pkt.RunMethod("rxPacket", Array(muAddr, muPort, messaggio))
Log("my: " & messaggio)
End Sub
Sub BloccoEx
Log(" Start Time: " & tstart)
Try
'InitializeWithIp("udp", 8888, mAddress)
InitializeWithIp("udp", muPort, muAddr)
Catch
Log(LastException.Message)
End Try
'mymsg = messaggio
'TempoPassato(tnow,tend)
tend = DateTime.Now
speriod = (tend-tstart)/1000
Log (" Time: " & speriod & " secondi")
End Sub
#if java
import java.io.*;
import java.net.*;
public static void SetMulticastSocket (String EventName, MulticastSocket socket, anywheresoftware.b4a.objects.SocketWrapper.UDPSocket udp) {
udp.init(ba, EventName, 8192, socket);
}
//public static void rxPacket (String messaggio)
public static void rxPacket (String AddrMu, Integer PortVal, String messaggio)
{
//public class MulticastReceiver {
// public static void main(String[] args) {
MulticastSocket socket = null;
DatagramPacket inPacket = null;
DatagramPacket outPacket = null;
byte[] inBuf = new byte[256];
byte[] outBuf = new byte[256];
try {
//Prepare to join multicast group
socket = new MulticastSocket(8888);
InetAddress address = InetAddress.getByName("224.2.2.3");
//InetAddress address = InetAddress.getByName(AddrMu);
socket.joinGroup(address);
System.out.println("Start loop wainting Datagram");
while (true) {
inPacket = new DatagramPacket(inBuf, inBuf.length);
outPacket = new DatagramPacket(outBuf, outBuf.length);
socket.receive(inPacket);
String msg = new String(inBuf, 0, inPacket.getLength());
System.out.println("From " + inPacket.getAddress() + " Msg : " + msg);
if (inBuf.length > 0) {
System.out.println("Exit Loop Datagram arrived");
break;
}
continue;
}
} catch (IOException ioe) {
System.out.println(ioe);
}
}
#end if