我运行的是一个混合服务器,它在TCP和UDP上监听,需要获取本地端口、远程IP地址和远程端口。目前,我检查基础类型是net.udpaddr还是net.tcpaddr的方法如下:
// BAD: but not sure a better way
switch reflect.TypeOf(remoteAddr).String() {
case "*net.UDPAddr":
p.SrcIP = remoteAddr.(*net.UDPAddr).IP.String()
p.SrcPort = uint(remoteAddr.(*net.UDPAddr).Port)
p.DstPort = uint(localAddr.(*net.UDPAddr).Port)
case "*net.TCPAddr":
p.SrcIP = remoteAddr.(*net.TCPAddr).IP.String()
p.SrcPort = uint(remoteAddr.(*net.TCPAddr).Port)
p.DstPort = uint(localAddr.(*net.TCPAddr).Port)
}
我不是这方面的最大粉丝,如果有人有任何看起来更干净的解决方案,我会非常感激的。