[Gambas-user] Sending Udp broadcast?

Werner wdahn at ...1000...
Thu Nov 13 09:35:42 CET 2008


Ron wrote:
> Hi,
>
> Need some help in how to send a broadcast udp message.
>
> Like a wake on lan Magic Packet.
> I know how to create the message, but how do you sent a broadcast 
> message with udpclient?
>
> Came up with this, but it results in a system error.
>
> hWOL = NEW UdpSocket AS "WOLSocket"
> hWOL.Broadcast = TRUE
> hWOL.Bind(0)
> IF hWOL.Status = Net.Active THEN
>    PRINT "Active!"
>    WRITE #hWOL, sMsg, Len(sMsg)
> ELSE
>    PRINT "NotActive!"
> END IF
>
> Thanks.
>
> Regards,
> Ron_2nd.
>   
'------------- Broadcast class -----------------------------------
' Gambas class file
'broadcasts a UDP message to all computers (including self)
'on the same class C subnet(s)

PUBLIC TXmitter AS UdpSocket

PUBLIC SUB _new()
  TXmitter = NEW UdpSocket AS "TXmitter"
  TXmitter.Broadcast = TRUE
  TXmitter.Bind(0)
END

PUBLIC SUB Send(thePort AS Integer, OPTIONAL theMessage AS String = " ")
DIM host AS String
DIM IPs AS String[]
DIM IP AS String
DIM thisIP AS String[]
  TXmitter.TargetPort = thePort
  EXEC ["hostname", "-i"] TO host
  IPs = Split(Trim$(host), " ")
  FOR EACH IP IN IPs
    thisIP = Split(IP, ".")
    IF CInt(thisIP[0]) = 127 THEN CONTINUE
    TXmitter.TargetHost = thisIP[0] & "." & thisIP[1] & "." & thisIP[2]
& "." & "255"
    WRITE #TXmitter, theMessage, Len(theMessage)
  NEXT
END

PUBLIC SUB TXmitter_Error()
  PRINT "Error" & Error.Text
END

PUBLIC SUB Close()
  IF TXmitter.Status > 0 THEN CLOSE #TXmitter
END


'--------------------
'using the Broadcast class:

'declaration section:
PUBLIC BCast AS NEW Broadcast 'UDP broadcaster

'in the code:
BCast.Send(12345, "Hello World!")

'==============================================================
'UDP Receiver (same port as transmitter):

PUBLIC netReceiver AS UdpSocket 'for incoming lap change information


PUBLIC SUB Form_Open()
  netReceiver = NEW UdpSocket AS "netReceiver"
  netReceiver.Bind(12345)
END

PUBLIC SUB Form_Close()
  IF netReceiver.Status > 0 THEN CLOSE #netReceiver
END


PUBLIC SUB netReceiver_Read()
DIM receivedData AS String
DIM receivedFields AS String[]
  READ #netReceiver, receivedData, Lof(netReceiver)
 'your code here
END

'--------------------------

Best Regards
Werner







More information about the User mailing list