From 1dbdb641ec95016cb62b2a27e564d83edf2e32d9 Mon Sep 17 00:00:00 2001 From: godo Date: Thu, 5 Sep 2024 13:42:30 +0800 Subject: [PATCH] change udp --- godo/localchat/udp.go | 48 +++++++++++++++++++++---------------------- 1 file changed, 23 insertions(+), 25 deletions(-) diff --git a/godo/localchat/udp.go b/godo/localchat/udp.go index 5e82ca8..639bd3b 100644 --- a/godo/localchat/udp.go +++ b/godo/localchat/udp.go @@ -17,9 +17,12 @@ type UdpMessage struct { Message interface{} `json:"message"` } -// 多播地址列表 -var multicastAddrs = []string{"239.255.255.250:2024", "239.255.255.251:2024", "224.0.0.251:1234", "224.0.0.1:1679"} -var OnlineUsers = make(map[string]UdpMessage) // 全局map,key为IP,value为主机名 +var multicastAddrs = []string{ + "239.255.255.250:2024", + "239.255.255.251:2024", + "224.0.0.251:1234", +} +var OnlineUsers = make(map[string]UdpMessage) // SendMulticast 发送多播消息 func init() { @@ -82,25 +85,8 @@ func SendMulticast(message UdpMessage) error { return nil } -// ListenForMulticast 监听多播消息 +// ListenForMulticast 监听所有多播消息 func ListenForMulticast() { - // 选择一个可用的多播地址 - var multicastGroup *net.UDPAddr - var err error - for _, addrStr := range multicastAddrs { - multicastGroup, err = net.ResolveUDPAddr("udp4", addrStr) - if err != nil { - log.Printf("Error resolving UDP address %s: %v", addrStr, err) - continue - } - break - } - - if multicastGroup == nil { - log.Println("No available multicast address found") - return - } - // 使用本地地址进行监听 localAddr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:2024") if err != nil { @@ -148,11 +134,23 @@ func ListenForMulticast() { log.Fatal("No suitable network interface found") } - if err := udpConn.JoinGroup(localInterface, multicastGroup); err != nil { - log.Printf("Failed to join multicast group %s: %v", multicastGroup.String(), err) - return - } + // 加入所有多播组 + // for _, addrStr := range multicastAddrs { + // multicastGroup, err := net.ResolveUDPAddr("udp4", addrStr) + // if err != nil { + // log.Printf("Error resolving UDP address %s: %v", addrStr, err) + // continue + // } + + // if err := udpConn.JoinGroup(localInterface, multicastGroup); err != nil { + // log.Printf("Failed to join multicast group %s: %v", multicastGroup.String(), err) + // continue + // } + + // log.Printf("成功加入多播组 %s", addrStr) + // } + // 开始监听多播消息 buffer := make([]byte, 1024) for { n, _, src, err := udpConn.ReadFrom(buffer)