GCDAsyncUDPSocket 使用 swift 从结构中获取源地址
GCDAsyncUDPSocket get source address from structure using swift
我正在使用 CocoaAsyncSocket 发送和接收 UDP 数据包。我的代码可以正常工作,但我不确定如何获取发件人的地址。以下函数接收数据包并具有可变地址,但它作为数据传递。
func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?)
{
}
我在这个post中发现数据是以下结构格式。
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 地址?
谢谢!
我已经使用以下代码从地址中获取信息 this other answer:
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)
希望对您有所帮助
我正在使用 CocoaAsyncSocket 发送和接收 UDP 数据包。我的代码可以正常工作,但我不确定如何获取发件人的地址。以下函数接收数据包并具有可变地址,但它作为数据传递。
func udpSocket(_ sock: GCDAsyncUdpSocket, didReceive data: Data, fromAddress address: Data, withFilterContext filterContext: Any?)
{
}
我在这个post中发现数据是以下结构格式。
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 地址?
谢谢!
我已经使用以下代码从地址中获取信息 this other answer:
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)
希望对您有所帮助