Как получить адрес из CocoaAsyncUDPSocket

Кто-нибудь знает, как работает метод делегата для получения данных UDP в CocoaAsyncSockets, когда дело доходит до получения исходного адреса? В частности, метод

-(void)udpSocket:(GCDAsyncUdpSocket *)sock didReceiveData:(NSData *)data fromAddress:(NSData *)address withFilterContext:(id)filterContext

Адрес возвращается как NSData*, но интерпретация его с использованием NSUTF8StringEncoding возвращает null, а NSASCIIStringEncoding возвращает кучу искаженных символов. Как это предполагается интерпретировать?


person Rick    schedule 01.08.2013    source источник
comment
Да, я хочу добиться более или менее того же. Однако я нашел более эффективное решение, чем то, которое было опубликовано там.   -  person Rick    schedule 01.08.2013
comment
Для адресов IPv4 это нормально. Я разместил там более сложный код, потому что он работает и с IPv6, который используется все больше и больше.   -  person Martin R    schedule 01.08.2013
comment
Ага, попался. :) Спасибо   -  person Rick    schedule 01.08.2013


Ответы (1)


Разобрался как это сделать, данные в виде struct sockaddr_in*. После импорта <arpa/inet.h>вы можете сделать следующее:

struct sockaddr_in *addr = (struct sockaddr_in *)[address bytes];
NSString *IP = [NSString stringWithCString:inet_ntoa(addr->sin_addr) encoding:NSASCIIStringEncoding];
person Rick    schedule 01.08.2013