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設備)建立連接。
我沒有設置後臺處理程序來重新連接 - 但它應該是沒有這個處理程序的工作(我想..)!
我錯過了這個套接字配置的東西嗎?