Я разрабатываю приложение для iOS. В моем приложении есть рабочее TCP-соединение с сервером, реализованное через NSStreams
. Теперь мне нужен порт, который использует соединение, что создает некоторые проблемы.Разработка iOS: получить частный IP и порт от NSReadStream
Я могу получить IP-адрес от итерации через интерфейсы устройства, но для номера порта я должен получить информацию из сокета. В следующем коде я пытаюсь получить сокет из своей работы и открыть NSInputStream _readstream
. Проблема в том, что CFSocketCopyAddress
нет, и я не понимаю, почему. Может кто-нибудь еще?
Любая помощь очень ценится!
// Initializing some variables we need
CFSocketContext context;
memset(&context, 0, sizeof(context));
context.info = (__bridge void*)self;
NSString *property = @"kCFStreamPropertySocketNativeHandle";
// Get hands on the used socket via the socket native handle
CFSocketNativeHandle *socketNativeHandle = (CFSocketNativeHandle*)CFReadStreamCopyProperty((__bridge CFReadStreamRef)(_readStream), (__bridge CFStringRef)(property));
CFSocketRef cfSocket = CFSocketCreateWithNative(NULL, *socketNativeHandle, kCFSocketNoCallBack, nil, &context);
// Ask the socket for the address information
CFDataRef dataRef = CFSocketCopyAddress(cfSocket); // dataRef is always nil :(
struct sockaddr_in *sockaddr = (struct sockaddr_in*)CFDataGetBytePtr(dataRef);
int portnumber = sockaddr->sin_port;