【问题标题】:GCDAsyncUDPSocket get source address from structure using swiftGCDAsyncUDPSocket 使用 swift 从结构中获取源地址
【发布时间】:2017-06-05 18:41:27
【问题描述】:

我正在使用 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];
};

我将如何快速将数据地址更改为结构,然后从中获取 IP 地址?

谢谢!

【问题讨论】:

    标签: swift cocoaasyncsocket


    【解决方案1】:

    我已经设法从地址获取信息,下面的代码取自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)
    

    希望对你有帮助

    【讨论】:

    • 谢谢!完美运行
    猜你喜欢
    • 2013-01-06
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多