【发布时间】:2014-01-15 16:15:23
【问题描述】:
我正在为 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;
【问题讨论】:
标签: ios sockets nsstream cfsocket