2017-06-05 8 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]; 
}; 

速やかにデータアドレスを構造体に変更してから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

感謝を助けることを願っています!完璧に働いた –

関連する問題