GCDAsyncUDPSocket使用swift从结构中获取源地址

GCDAsyncUDPSocket使用swift从结构中获取源地址,swift,cocoaasyncsocket,Swift,Cocoaasyncsocket,我正在使用CocoaAsyncSocket发送和接收UDP数据包。我的代码正在运行,但我不确定如何获取发件人的地址。下面的函数接收数据包并具有可变地址,但它作为数据传递 func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?) { } 我发现数据的结构格式如下 struct sockaddr

我正在使用CocoaAsyncSocket发送和接收UDP数据包。我的代码正在运行,但我不确定如何获取发件人的地址。下面的函数接收数据包并具有可变地址,但它作为数据传递

func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?)
{

}
我发现数据的结构格式如下

struct sockaddr_in {
__uint8_t   sin_len;
sa_family_t sin_family;
in_port_t   sin_port;
struct  in_addr sin_addr;
char        sin_zero[8];
};
在swift中,我如何将数据地址更改为结构,然后从中获取ip地址


谢谢

我通过以下代码从地址获取信息:

var hostname=[CChar](重复:0,计数:Int(NI_MAXHOST))
做{
请在中尝试address.withUnsafeBytes{(指针:UnsafePointer)->Void
guard getnameinfo(指针,socklen_t(地址.count))&主机名,socklen_t(主机名.count),nil,0,NI_numericost)=0其他{
抛出N错误(域:“域”,代码:0,用户信息:[“错误”:“无法获取ip地址”])
}
}
}抓住{
打印(错误)
返回
}
让senderAddress=String(cString:hostname)

希望对您有所帮助

谢谢!工作完美
        var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
        do {
            try address.withUnsafeBytes { (pointer:UnsafePointer<sockaddr>) -> Void in
                guard getnameinfo(pointer, socklen_t(address.count), &hostname, socklen_t(hostname.count), nil, 0, NI_NUMERICHOST) == 0 else {
                    throw NSError(domain: "domain", code: 0, userInfo: ["error":"unable to get ip address"])
                }
            }
        } catch {
            print(error)
            return
        }
        let senderAddress = String(cString:hostname)