【发布时间】:2012-11-15 11:46:06
【问题描述】:
我有一个包含客户端地址(struct sockaddr_in)的 CFDataRef(我什至不确定,为什么我不再使用 CFData 和 Socket..),我需要获取 IP 和端口。不幸的是,没有直接的方法可以得到它们。
因此我尝试了以下方法:
CFDataRef clientAddress = ...; //defined somewhere else, contains a sockaddr_in
struct sockaddr_in clientAddress2;
clientAddress2 = *(struct sockaddr_in*)CFDataGetBytePtr(clientAddress);
(不要把名字当回事,它们只是为了这个例子的目的)。 不幸的是,CFDataGetBytePtr 的执行似乎崩溃了,因为在运行我的应用程序时出现“EXC_BAD_ACCESS (code=2,address=0x0)”错误。
从包含 sockaddr_in 的 CFDataRef 获取 IP 和端口的最佳方法是什么?
谢谢!
【问题讨论】:
-
我不确定为什么你会下降到那个水平:) 但请看我的回答
-
CFDataGetBytePtr 不复制字节,因此它们与数据一起被释放。也许这是你的问题?结构指向已释放的内存
-
好吧,CFSocket 是我能找到的最好的实现 UDP 连接的方法。但是,似乎在使用它们时,您需要非常快速地回到 C 级别,甚至必须在两个方向上进行转换 :-( 不确定我是否明白您的意思。为什么要释放数据?文档确实什么都不说。仍然无法找出正确的解决方案..
-
CFDataRef 在 CFDataRef 被释放时释放它的字节,然后 socket_addr* 变成一个指向垃圾的指针
标签: objective-c network-programming