2017-06-05 31 views
1

我使用CocoaAsyncSocket發送和接收UDP數據包。我的代碼正在工作,但我不確定如何獲取發件人的地址。以下函數接收數據包並具有可變地址,但它作爲數據傳遞。GCDAsyncUDPSocket從結構中使用swift獲取源地址

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地址?

謝謝!

回答

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) 

希望它會幫助你

+0

謝謝!完美工作 –