我正在做一些接收多播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相关
如何解决这个问题?