2011-03-02 34 views
1

我是可可/ iOS的新手 - iphone平臺在運行循環上安排讀取流 - iOS

我正在嘗試使用Core Foundations來處理網絡流。我遵循CFNetworking指南,但是我無法得到一個簡單的測試工作。以下編譯和運行,但沒有記錄到NSLog。

我正在向CFReadStreamSetClient提供Callback,clientCB,並在運行循環中調度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); 
    } 

} 

回答

1

看起來您忘記了調用CFReadStreamOpen。

if(CFReadStreamSetClient(readStream, registeredEvents, clientCB, &myContext)) 
    { 
     CFReadStreamScheduleWithRunLoop(readStream, CFRunLoopGetCurrent(), kCFRunLoopCommonModes); 
    } 

    if (!CFReadStreamOpen(readStream)) { 
     /* error handling */ 
    } 
} 
+0

我正在嘗試..謝謝 – Nick 2011-03-03 22:31:41