NSRunLoop期间CFHTTPStream分割FAUL

我试图组装一个玩具应用程序,以通过HTTP的CoreFoundation服务器进行交互。 我没有使用NSURLConnection的,因为我希望能够以指定的OSX系统偏好设置中设置不同的代理。

我的问题是,我无法找到任何工作的例子,苹果的文档不提供代码的工作片段。

总之,这是我拉到一起的代码:

#import <CoreFoundation/CoreFoundation.h> #import <CoreServices/CoreServices.h> #import <Foundation/Foundation.h> void myCallBack (CFReadStreamRef stream, CFStreamEventType eventType, void *clientCallBackInfo){ NSLog(@"Something happened"); BOOL *done = ((BOOL *)clientCallBackInfo); *done = TRUE; } int main(int argc, char *argv[]){ NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; CFStringRef bodyString = CFSTR(""); // Usually used for POST data CFStringRef url = CFSTR("http://www.apple.com"); CFURLRef myURL = CFURLCreateWithString(kCFAllocatorDefault, url, NULL); CFStringRef requestMethod = CFSTR("GET"); CFHTTPMessageRef myRequest = CFHTTPMessageCreateRequest(kCFAllocatorDefault, requestMethod, myURL, kCFHTTPVersion1_1); if (myRequest){ NSLog(@"Request created: %@ %@", CFHTTPMessageCopyRequestMethod(myRequest), CFURLGetString(CFHTTPMessageCopyRequestURL(myRequest))); } CFDataRef bodyData = CFStringCreateExternalRepresentation(kCFAllocatorDefault, bodyString, kCFStringEncodingASCII, 0); CFHTTPMessageSetBody(myRequest, bodyData); NSLog(@"HTTPMessage body set"); CFDataRef mySerializedRequest = CFHTTPMessageCopySerializedMessage(myRequest); NSLog(@"Serialized string generated"); CFStringRef mySerializedString = CFStringCreateFromExternalRepresentation(kCFAllocatorDefault, mySerializedRequest, kCFStringEncodingASCII); NSLog(@"Serialized request: %@", mySerializedString); CFReadStreamRef myReadStream = CFReadStreamCreateForHTTPRequest(kCFAllocatorDefault, myRequest); BOOL done = FALSE; CFReadStreamOpen(myReadStream); CFOptionFlags registeredEvents = kCFStreamEventHasBytesAvailable | kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered; NSLog(@"Setting read stream client"); if (CFReadStreamSetClient(myReadStream, registeredEvents, myCallBack, (void *)&done)){ CFReadStreamScheduleWithRunLoop(myReadStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); while (!done){ NSLog(@"Wait"); [[NSRunLoop currentRunLoop] run]; } }else{ NSLog(@"Error setting readstream client"); } CFRelease(myRequest); CFRelease(myURL); CFRelease(url); CFRelease(mySerializedRequest); myRequest = NULL; mySerializedRequest = NULL; [pool drain]; }

代码编译,但它抛出一个段错误:

Reading symbols for shared libraries .+++++...................... done 2010-09-06 21:36:34.470 a.out[27973:a0f] Request created: GET http://www.apple.com 2010-09-06 21:36:34.473 a.out[27973:a0f] HTTPMessage body set 2010-09-06 21:36:34.474 a.out[27973:a0f] Serialized string generated 2010-09-06 21:36:34.474 a.out[27973:a0f] Serialized request: GET / HTTP/1.1 2010-09-06 21:36:34.478 a.out[27973:a0f] Setting read stream client 2010-09-06 21:36:34.479 a.out[27973:a0f] Wait Program received signal EXC_BAD_ACCESS, Could not access memory. Reason: 13 at address: 0x0000000000000000 0x00007fff83b7b83d in _signalEventSync () (gdb) bt #0 0x00007fff83b7b83d in _signalEventSync () #1 0x00007fff83b7b7f4 in _cfstream_solo_signalEventSync () #2 0x00007fff83b7b734 in _CFStreamSignalEvent () #3 0x00007fff8391c3a1 in HTTPReadStream::streamEvent () #4 0x00007fff83b7b883 in _signalEventSync () #5 0x00007fff83b7c5d9 in _cfstream_shared_signalEventSync () #6 0x00007fff83b1be91 in __CFRunLoopDoSources0 () #7 0x00007fff83b1a089 in __CFRunLoopRun () #8 0x00007fff83b1984f in CFRunLoopRunSpecific () #9 0x00007fff8300fa18 in -[NSRunLoop(NSRunLoop) runMode:beforeDate:] () #10 0x00007fff8300f8f7 in -[NSRunLoop(NSRunLoop) run] () #11 0x0000000100000c94 in main (argc=1, argv=0x7fff5fbff5b8) at test.m:56

我不明白错误所在。 任何人都可以告诉我光或点我就如何管理CFHTTPStreams一个明显的例子?

谢谢你,安德烈

--------------解决方案-------------

问题是,我没仔细看CFReadStreamSetClient的文档。 第三个参数必须是引用CFStreamClientContext,而我经过一个参考的任意指针,而不是已被纳入环境。

修复此解决分段错误,现在的测试CA工作正常。

分类:目标C 时间:2012-01-01 人气:0
分享到:

相关文章

  • 学习基于网络编程的C ++程序员 2014-01-03

    我想创建一个网络接口,一个项目,我脑子里想了一会儿. 我一直用C ++编程(加HLSL)专业在过去的五年,学会了在大学的各种其他(Java中,VHDL,众多的汇编语言). 我正在寻找好的资源来比较网页编程(JavaScript的,PHP,Python和Ruby等)不同的可能性. 性能和良好的API是我的两个主要要求. 我想我的项目的比例,而不必在另一种语言,因为它得到更大的再次​​写入. 我试图寻找那些贴近我看看Mozilla的贝斯平,其中大部分是做的JavaScript(我发现我的项目最接近)

  • Python入门网络编程的好处? 2012-02-19

    我一直在寻找一本关于Python的网络编程,我想知道什么是学习Python的网络编程全面好处? 这将是在能够开发一些很酷的,突破性的Web应用程序的环境. 我是一个Python newbe因此所有竟被意见可以理解的. 亲切的问候 --------------解决方案------------- "网络编程"是不是"酷Web应用程序". 它更多的是建立服务器,并创建跟服务器的客户端. 这是关于插座,TCP / IP通信,XMLRPC,HTTP协议以及所有让两台计算机相互

  • 在.NET网络编程 2012-02-26

    我在寻找有关.NET中的网络编程(C#最好)一些很好的资源,我设法找到了一些电子书,但他们所有的书早在2002 - 2003年. 如果您知道的任何电子书,视频网站......或任何其他资源将完全归功于评论他们为我. --------------解决方案------------- 你不说你在寻找什么样的抽象级别. 如果你有兴趣在更高级别的网络的发展,看看WCF初学者的中心. "网络编程在.net"是最好的书我读过关于这个问题,而且大部分还是相当有关. 它将离开了东西是插座(在2.0,尽管

  • 学习网络编程 2012-06-12

    我是一个面向对象的程序员,一直是将近两年了. 我知道Java和C#. 我不知道是网络编程. 我知道什么是HTML,但从来没有真正使用过它. 什么是开始使用网络编程最好的方法是什么? HTML,CSS,JavaScript的,PHP,ASP.NET. 我应该怎么入手? 我想学习网络编程的原因主要是因为每个人都知道如何做到这一点,所以作为软件的学生,我也应该如此. 经常有朋友问我是否可以做一个网站来获取他们,但我甚至不知道从哪里开始,这让我很烦. 转型将如何硬/容易呢? --------------

  • 网络编程实现隔靴搔痒标杆 2013-05-19

    我一直在做使用Java和C到目前为止,我只能够使用不同的技术,看似不管在回送邮件的大小达到大约15兆字节/秒的网络速度,远程网络也得到大致相同的一些网络编程速度. 尽管我已经使用iperf进行基准测试网络速度,并能实现1.6千兆字节/秒. 这显然​​是一个显著的改进. 没有任何人有任何想法我怎么能达到这个速度在实际编程? --------------解决方案------------- 警告:错误的ASCII艺术如下! 如果您的网络模式看起来像下面这样,你永远不会得到真正伟大的速度: REQ RE

  • C语言游戏编程的基础知识 2013-06-24

    在过去2个月,我一直在努力学习游戏编程的基础知识. 所以,我用Java编码一些简单的游戏,学习的基础知识,如俄罗斯方块,跳棋和Pac-Man的. 现在,我想学习/提高我的技能,在C,所以我有这个想法写在C中那些游戏更多地了解内存管理,没有面向对象,等等.我以前,但从来没有与显卡做了基本的C语言编程,所以我不"知道从哪里开始. 哪个库我应该用C编写简单的2D游戏? GTK +? 开罗图书馆? 任何教程,你可以推荐? 图形库? 谢谢 --------------解决方案------------- 我

  • 如何确定性释放核心基础对象在垃圾回收的环境? 2013-07-11

    我用在垃圾收集环境中的核心基础的方法. 据以CFRelease文件调用简单地递减引用计数,但不释放对象: 垃圾收集的环境中和引用计数环境之间的差异是在对象的解除分配的定时. 在引用计数环境中,当的保留计数的对象降到0便立即释放; 在一个垃圾收集的环境中,会发生什么,当一个Core Foundation对象的保留计数从1变为0取决于它驻留在内存中: 如果对象是在malloc的区域,它被立即释放. 如果对象是在垃圾收集区,最后CFRelease() 不立即释放对象 ,它只是使它有资格通过的时候才发现

  • 什么是学习网络编程的一些很好的资源? 2013-07-16

    最近,我开始参加学校两个班,重点组网中,一个关于分布式系统和一般的另一个关于计算机网络. 在完成对两个班的第一个实验室之后,我现在有一个很好的与C和Java的网络协议和接口的概念理解. 现在,我试图超越的基本概念,并成为在通信类和对象的设计,网络设计的图案,中间插座/流管理公约,重要的图书馆,和一般的* nix的网络更好地用C或面向对象编程语言的中间技术. 你可以建议你有成功的任何资源? --------------解决方案------------- 史蒂芬的知道这一切本关于网络编程是太详细入手

  • Python的网络编程的项目? 2013-11-12

    我在想,如果你们知道任何网站或对初学者中级Python的网络编程项目/实际问题的任何想法到实践Python的网络编程? 我刚刚读完"的Python网络编程基础",并正在寻找实践的任务是不是太困难来磨练自己的技能.我做了一个简单的本地主机客户端/服务器,可以让你加/减/乘/除号.."客户"通过在2号和一个操作到服务器,服务器执行的计算和返回值. 什么我可以做,这将是对网络编程良好实践,这并不涉及到安装库中的任何想法? 谢谢! --------------解决方案---

  • 书上的解释为经验不足的朋友们编程的基础知识 2014-10-04

    我有一个朋友,谁去坐牢,大约一年. 我希望他能利用他在县学习如何编程和对互联网的时间,所以我可以帮他一份工作的时候,他得到了. 什么是一些教编程的基础知识,最好的书,其中的语言做,服务器和数据库是如何工作的,如何上网工程在一般情况下,MVC,LAMP,SQL,等等,等等.我已经教了他一些基本的HTML和解释了一个函数被调用,但我要一次用完. 噢,不是"互联网傻瓜"等,请! --------------解决方案------------- 我不知道,如果你的朋友都会有电脑/上网,但我认为,

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.286 (s). 10 q(s)