0
设置我的.plist运行,而后台的应用程序,我已经建立了这样的连接:iOS的VoIP应用退出
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
//open c socket:
int rc; // ret code of s.c.
int my_socket;
struct sockaddr_in dest_addr;
my_socket = socket(AF_INET, SOCK_STREAM, 0);
assert(my_socket >= 0);
dest_addr.sin_family = AF_INET;
dest_addr.sin_port = htons(SERVER_LOC_PORT);
dest_addr.sin_addr.s_addr = inet_addr(SERVER_IP);
memset(dest_addr.sin_zero,
'\0',
sizeof dest_addr.sin_zero);
rc = connect(my_socket,
(struct sockaddr *)&dest_addr,
(socklen_t) sizeof(dest_addr));
if(rc != 0){
return NO ;
}
NSLog(@"Start connection");
// Open a stream based on the existing socket. Then configure
// the stream for async operation.
CFStreamCreatePairWithSocket(NULL, my_socket, &readStream, &writeStream);
assert(readStream != NULL);
self.networkStreamIn = (NSInputStream *) readStream;
self.networkStreamOut = (NSOutputStream *) writeStream;
//releasers
CFRelease(readStream);
CFRelease(writeStream);
self.networkStreamIn.delegate = self;
self.networkStreamOut.delegate = self;
BOOL res = [self.networkStreamIn setProperty:NSStreamNetworkServiceTypeVoIP
forKey:NSStreamNetworkServiceType];
if(!res){
NSLog(@"Cannot connect") ;
// @TODO: Error handling here
}
[self.networkStreamIn scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.networkStreamIn open];
[self.networkStreamOut open];
我也把我的流()是在收到数据时调用。 然后我读取/从服务器写入。 这是工作。在backgrount上。但几分钟后(仅在backgound模式!)服务器打印到日志“java.net.SocketTimeoutException:读取超时”。并且不再与客户端(iOS设备)建立连接。
我没有设置后台处理程序来重新连接 - 但它应该是没有这个处理程序的工作(我想..)!
我错过了这个套接字配置的东西吗?