Golang UDP多播

时间:2016-08-17 14:59:20

标签: go multicast

我正在做一些接收多播UDP流的测试,并使用以下函数将其保存到文件中:

func Record2(udp string, filePath string) {
    c1, err := net.ListenPacket("udp4", udp)
    if err != nil {
        return
    }
    defer c1.Close()
    p1 := ipv4.NewPacketConn(c1)
    en0, err := net.InterfaceByName("enp3s0")
    addr, _ := net.ResolveUDPAddr("udp4", udp)
    if err := p1.JoinGroup(en0, addr); err != nil {

    }
    Bee.DelFile(filePath)
    fo, err := os.Create(filePath)
    defer fo.Close()
    if err != nil {
        panic(err)
    }
    io.Copy(fo, p1)

}
func Record(udp string, filePath string) {
    addr, err := net.ResolveUDPAddr("udp4", udp)

    if err != nil {
        return
    }
    Bee.DelFile(filePath)
    fo, err := os.Create(filePath)
    defer fo.Close()
    if err != nil {
        panic(err)
    }
    l, err := net.ListenMulticastUDP("udp4", nil, addr)

    defer l.Close()
    l.SetReadBuffer(maxDatagramSize)
    io.Copy(fo, l)

}
 go Record2("224.1.2.2:1234", "file1")
 go Record2("224.1.2.1:1234", "file2")
 go Record("224.1.2.2:1234", "file3")
 Record("224.1.2.1:1234", "file4")

问题是udp流有不同的内容,而保存的所有文件都有与第一个地址相同的内容

使用具有不同端口的UDP地址

时不会发生这种情况

我不确定这是否与SO_REUSEADDR相关

如何解决这个问题?

0 个答案:

没有答案