diff --git a/godo/localchat/udp.go b/godo/localchat/udp.go index 639bd3b..b468713 100644 --- a/godo/localchat/udp.go +++ b/godo/localchat/udp.go @@ -6,8 +6,6 @@ import ( "log" "net" "net/http" - - "golang.org/x/net/ipv4" ) type UdpMessage struct { @@ -20,7 +18,7 @@ type UdpMessage struct { var multicastAddrs = []string{ "239.255.255.250:2024", "239.255.255.251:2024", - "224.0.0.251:1234", + "224.0.0.251:2024", } var OnlineUsers = make(map[string]UdpMessage) @@ -87,75 +85,24 @@ func SendMulticast(message UdpMessage) error { // ListenForMulticast 监听所有多播消息 func ListenForMulticast() { - // 使用本地地址进行监听 - localAddr, err := net.ResolveUDPAddr("udp4", "0.0.0.0:2024") + // 使用本地地址监听 + localAddr, err := net.ResolveUDPAddr("udp4", ":56780") if err != nil { - log.Printf("Error resolving local UDP address: %v", err) - return + log.Fatalf("Failed to resolve local UDP address: %v", err) } conn, err := net.ListenUDP("udp4", localAddr) if err != nil { - log.Printf("Error listening on UDP address: %v", err) - return + log.Fatalf("Failed to listen on UDP address: %v", err) } defer conn.Close() - udpConn := ipv4.NewPacketConn(conn) - - // 获取本地网络接口 - localIfaces, err := net.Interfaces() - if err != nil { - log.Fatalf("Failed to get local interfaces: %v", err) - } - - // 选择一个可用的网络接口 - var localInterface *net.Interface - for _, iface := range localIfaces { - addrs, err := iface.Addrs() - if err != nil { - log.Printf("Failed to get addresses for interface %s: %v", iface.Name, err) - continue - } - for _, addr := range addrs { - if ipNet, ok := addr.(*net.IPNet); ok && !ipNet.IP.IsLoopback() { - if ipNet.IP.To4() != nil { - localInterface = &iface - break - } - } - } - if localInterface != nil { - break - } - } - - if localInterface == nil { - log.Fatal("No suitable network interface found") - } - - // 加入所有多播组 - // 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) + n, remoteAddr, err := conn.ReadFromUDP(buffer) if err != nil { - log.Printf("Error reading from UDP: %v, addr: %v", err, src) + log.Printf("Error reading from UDP: %v", err) continue } @@ -170,13 +117,13 @@ func ListenForMulticast() { if udpMsg.Type == "file" { RecieveFile(udpMsg) } - log.Printf("Received message from %s: %s", udpMsg.IP, udpMsg.Hostname) + log.Printf("Received message from %s: %s", remoteAddr, udpMsg.Hostname) } } // SendToIP 向指定的 IP 地址发送 UDP 消息 func SendToIP(ip string, message UdpMessage) error { - addr, err := net.ResolveUDPAddr("udp4", fmt.Sprintf("%s:2024", ip)) + addr, err := net.ResolveUDPAddr("udp4", ip) if err != nil { log.Printf("Failed to resolve UDP address %s: %v", ip, err) return err