- (void)createSocket {
socketClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
NSLog(@"socketClient-------%d", socketClient);
if (socketClient >= 0) {
CFReadStreamRef readStream = NULL;
CFStreamCreatePairWithSocket(kCFAllocatorDefault, socketClient, &readStream, nil);
self.inStream = (NSInputStream *)readStream;
[inStream setDelegate:self];
[inStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
if ( [inStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]) {
NSLog(@"inStream setVoipProperty OK");
[inStream open];
...(doing something here)
}
}
}
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
case NSStreamEventOpenCompleted: {
NSLog(@"Open Completed");
} break;
case NSStreamEventHasBytesAvailable: {
NSLog(@"Read available");
} break;
case NSStreamEventHasSpaceAvailable: {
NSLog(@"NSStreamEventHasSpaceAvailable");
} break;
case NSStreamEventErrorOccurred: {
NSLog(@"NSStreamEventErrorOccurred");
} break;
case NSStreamEventEndEncountered: {
NSLog(@"NSStreamEventEndEncountered");
} break;
default: {
} break;
}
socketClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
NSLog(@"socketClient-------%d", socketClient);
if (socketClient >= 0) {
CFReadStreamRef readStream = NULL;
CFStreamCreatePairWithSocket(kCFAllocatorDefault, socketClient, &readStream, nil);
self.inStream = (NSInputStream *)readStream;
[inStream setDelegate:self];
[inStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
if ( [inStream setProperty:NSStreamNetworkServiceTypeVoIP forKey:NSStreamNetworkServiceType]) {
NSLog(@"inStream setVoipProperty OK");
[inStream open];
...(doing something here)
}
}
}
- (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{
switch (eventCode) {
case NSStreamEventOpenCompleted: {
NSLog(@"Open Completed");
} break;
case NSStreamEventHasBytesAvailable: {
NSLog(@"Read available");
} break;
case NSStreamEventHasSpaceAvailable: {
NSLog(@"NSStreamEventHasSpaceAvailable");
} break;
case NSStreamEventErrorOccurred: {
NSLog(@"NSStreamEventErrorOccurred");
} break;
case NSStreamEventEndEncountered: {
NSLog(@"NSStreamEventEndEncountered");
} break;
default: {
} break;
}
}
同时设置plist里的Required background modes选项为“App provides Voice over IP services”