2013-05-14 113 views
0

我们使用java聊天服务器为iPhone制作了聊天应用程序。如何在iOS中为套接字连接设置“KEEP ALIVE”?

我们为此使用了套接字。在iOS端我们使用了下面的代码;

#import <CFNetwork/CFNetwork.h> 
#import <sys/socket.h> 
#import <sys/types.h> 

- (void) viewDidLoad 
{ 
    [self initNetworkCommunication]; 
} 

#pragma mark Network connection 
- (void) initNetworkCommunication 
{ 
    CFReadStreamRef readStream; 
    CFWriteStreamRef writeStream; 
    CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)@"xx.xx.xx.xx", xxxx, &readStream, &writeStream); 

    inputStream = (NSInputStream *)readStream; 
    outputStream = (NSOutputStream *)writeStream; 
    [inputStream setDelegate:self]; 
    [outputStream setDelegate:self]; 
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; 

    [inputStream open]; 
    [outputStream open]; 

} 

但是,只要应用程序在后台运行,套接字就会断开连接。所以,我们必须制造插座"KEEP ALIVE"

在服务器端,我们已经通过socket.setKeepAlive(true, 2000);实现了这一点,但我们无法在应用程序(即iOS)上设置它。

我们已搜查这些链接 - Link1Link2

他们指定使用的代码像下面使插座保持活跃;

CFDataRef data = (CFDataRef)CFWriteStreamCopyProperty((CFWriteStreamRef)outputStream, kCFStreamPropertySocketNativeHandle); 

    if(data) 
    { 
     CFSocketNativeHandle socket_handle = *(CFSocketNativeHandle *)CFDataGetBytePtr(data); 
     CFRelease(data); 

      NSLog(@"SOCK HANDLE: %x", socket_handle); 

      //Enabling keep alive 
     if(setsockopt(socket_handle, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt)) < 0) 
     { 
      NSLog(@"Yikes 2: failed to set keepalive! ERRNO: %s", strerror(errno)); 
     } 
    } 

我们已经尝试过这种代码,但不能能够找到socket_handle, SOL_SOCKET, SO_KEEPALIVE, &opt, sizeof(opt)变量的瓦莱斯。

那么如何让套接字连接在ios(objective-c)中保持活跃?

谢谢。您.m文件

+0

[这](http://stackoverflow.com/questions/11387560/keeping-a-socket-connection-alive-in-ios)后可能会帮助你,让我了解洞察力。祝你好运 – 2013-05-14 05:52:30

+0

@DipenPanchasara:这就是问题中提到的“Link1”:-) – 2013-05-14 05:54:24

+0

这是否有帮助:http://stackoverflow.com/a/15787080/1187415? - 别忘了'#include '。 – 2013-05-14 05:56:21

回答

0
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/socket.h> 
#include <netinet/in.h> 

相关问题