我正在为 iOS 开发一个应用程序。在我的应用程序中,有一个到服务器的有效 TCP 连接,通过NSStreams
. 现在我需要连接使用的端口,这会产生一些问题。
我可以通过设备的接口迭代来获取 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;