我刚接触Cocoa/iOS - iphone平台
我正在尝试使用Core Foundation来处理网络流。我正在遵循CFNetworking指南,但是我不能让一个简单的测试工作。以下代码会编译并运行,但不会记录到NSLog中。
我将回调clientCB提供给CFReadStreamSetClient,并在run循环中调度readStream (至少这是这样的想法)。
我还以为CallBack会报告些什么呢。
有没有人能告诉我哪里出错了?我已经telnet到这台服务器上了,它工作正常。任何建议都会很有帮助。
谢谢。
void clientCB(CFReadStreamRef stream, CFStreamEventType event, void *myPtr)
{
switch(event) {
case kCFStreamEventHasBytesAvailable:{
UInt8 buf[BUFSIZE];
CFIndex bytesRead = CFReadStreamRead(stream, buf, BUFSIZE);
if (bytesRead > 0) {
NSLog(@"Server has data to read!");
}
break;
}
case kCFStreamEventErrorOccurred:
NSLog(@"A Read Stream Error Has Occurred!");
case kCFStreamEventEndEncountered:
NSLog(@"A Read Stream Event End!");
default:
break;
}
}
- (IBAction) connectToServer: (id) sender
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFHostRef host = CFHostCreateWithName(kCFAllocatorDefault, (CFStringRef)@"irc.freenode.net");
CFStreamCreatePairWithSocketToCFHost(kCFAllocatorDefault, host, 6667, &readStream, &writeStream);
CFStreamClientContext myContext = {
0,
self,
(void *(*)(void *info))CFRetain,
(void (*)(void *info))CFRelease,
(CFStringRef (*)(void *info))CFCopyDescription
};
CFOptionFlags registeredEvents = kCFStreamEventHasBytesAvailable |
kCFStreamEventErrorOccurred | kCFStreamEventEndEncountered;
if(CFReadStreamSetClient(readStream, registeredEvents, clientCB, &myContext))
{
CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
}
}发布于 2011-03-02 15:31:50
你好像忘了给CFReadStreamOpen打电话了。
if(CFReadStreamSetClient(readStream, registeredEvents, clientCB, &myContext))
{
CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes);
}
if (!CFReadStreamOpen(readStream)) {
/* error handling */
}
}https://stackoverflow.com/questions/5163863
复制相似问题