我想創建一個iPhone和PC之間的TCP連接。iOS如何將選擇器註冊爲流事件回調?
所以我創建了兩個CFStreamRef-s,我想註冊我的對象選擇器,以便在新字節可供讀取時調用。
當我從鏈接瞭解以上我可以這樣
CFReadStreamSetClient(myReadStream, registeredEvents, myCallBack, &myContext)
我可以註冊我的對象這樣的選擇讀取流注冊功能?
我想創建一個iPhone和PC之間的TCP連接。iOS如何將選擇器註冊爲流事件回調?
所以我創建了兩個CFStreamRef-s,我想註冊我的對象選擇器,以便在新字節可供讀取時調用。
當我從鏈接瞭解以上我可以這樣
CFReadStreamSetClient(myReadStream, registeredEvents, myCallBack, &myContext)
我可以註冊我的對象這樣的選擇讀取流注冊功能?
CFReadStreamRef只是一個NSInputStream。你必須做更多的
-(void) tryToConnect
{
CFReadStreamRef myReadStream = NULL;
CFWriteStreamRef myWriteStream = NULL;
// Create socket.
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
(CFStringRef) ip_,
port_,
&myReadStream,
&myWriteStream);
//TODO: check if everything is ok
readStream_ = (NSInputStream*) myReadStream;
writeStream_ = (NSOutputStream*) myWriteStream;
[readStream_ setDelegate:self]; //register to get events
[readStream_ scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[readStream_ open];
[writeStream_ open];
[self sendSomething];
}
一切都是實現NSStreamDelegate
看看這個異步套接字網絡庫:
http://code.google.com/p/cocoaasyncsocket/
AsyncSocket是CFSocket和CFStream一個面向對象的封裝,並支持TCP和UDP。
您可以通過在`myContext`結構的委託指針,並從內部`myCallback`調用它的方法/選擇。所以你應該使用`myCallback`作爲你的方法的基礎。 – yfrancis 2012-10-31 03:04:09