Browse Source

change udp

master
godo 9 months ago
parent
commit
1dbdb641ec
  1. 48
      godo/localchat/udp.go

48
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)

Loading…
Cancel
Save