Creation d'un module permettant d'envoyer des données sur une adresse multicast. Pour le moment le message envoyé, l'adress, le port et le temps entre chaque envoie est prédéfini.
This commit is contained in:
parent
a4d5081bb2
commit
8399d59430
65
pkg/network/ClientMulticast.go
Normal file
65
pkg/network/ClientMulticast.go
Normal file
@ -0,0 +1,65 @@
|
||||
package network
|
||||
|
||||
import (
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
// CreateClientMulticast Méthode de construction d'un instance de la stuct ClientMulticast
|
||||
func CreateClientMulticast(address string, second time.Duration) ClientMulticast {
|
||||
return ClientMulticast{
|
||||
address: address,
|
||||
second: second,
|
||||
}
|
||||
}
|
||||
|
||||
// ClientMulticast Cette structure représente une communication en multicast.
|
||||
// TODO : Prévoir une fermeture de la connection (con.Close())
|
||||
type ClientMulticast struct {
|
||||
// address Adresse de multicast (address:port)
|
||||
address string
|
||||
|
||||
// second Temps en seconde entre chaque ping
|
||||
second time.Duration
|
||||
}
|
||||
|
||||
// Run Cette méthode démarre une commmunication multicast
|
||||
func (cMult ClientMulticast) Run() {
|
||||
addr, done := cMult.ResolveAddr()
|
||||
if done {
|
||||
return
|
||||
}
|
||||
|
||||
con, done2 := cMult.DialUdp(addr)
|
||||
if done2 {
|
||||
return
|
||||
}
|
||||
|
||||
for {
|
||||
con.Write([]byte("Hello"))
|
||||
time.Sleep(time.Second * cMult.second)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ResolveAddr Permet de résoude l'addresse
|
||||
func (cMult ClientMulticast) ResolveAddr() (*net.UDPAddr, bool) {
|
||||
addr, errResUdp := net.ResolveUDPAddr("udp", cMult.address)
|
||||
|
||||
if errResUdp != nil {
|
||||
println(errResUdp.Error())
|
||||
return nil, true
|
||||
}
|
||||
|
||||
return addr, false
|
||||
}
|
||||
|
||||
// DialUdp Ouvre une connection UDP
|
||||
func (cMult ClientMulticast) DialUdp(addr *net.UDPAddr) (*net.UDPConn, bool) {
|
||||
con, errDial := net.DialUDP("udp", nil, addr)
|
||||
if errDial != nil {
|
||||
println(errDial.Error())
|
||||
return nil, true
|
||||
}
|
||||
return con, false
|
||||
}
|
Loading…
Reference in New Issue
Block a user