相关疑难解决方法(0)

在iOS中保持套接字连接存活

我有以下用Objective-C编写的代码,用于将数据写入套接字.服务器在Ubuntu上运行node.js:

NSString *url = @"anIPAddress";        
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;            
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)url, 9000, &readStream, &writeStream);
self.inputStream = (NSInputStream *)readStream;            
self.outputStream = (NSOutputStream *)writeStream;
[self.inputStream setDelegate:self];            
[self.outputStream setDelegate:self];            
[self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];            
[self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];            
[self.inputStream open];            
[self.outputStream open];
Run Code Online (Sandbox Code Playgroud)

我能够连接到服务器并发送信息.但是我注意到几分钟后连接超时(我想5分钟左右?).我怎样才能保持这种联系?我知道有一个断开连接,因为如果我连接到终端下的服务器,同样的事情发生了,我必须保持该连接存活.我想我的代码中也发生了同样的事情.谢谢你的帮助!

sockets timeout objective-c keep-alive ios5

11
推荐指数
2
解决办法
1万
查看次数

NSStream TCP Keep-alive iOS

我已编写此代码来设置服务器的流:

-(void)streamOpenWithIp:(NSString *)ip withPortNumber:(int)portNumber;
{
       CFReadStreamRef readStream;
       CFWriteStreamRef writeStream;
       CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (__bridge CFStringRef)ip, portNumber, &readStream, &writeStream);

       if(readStream && writeStream)
       {
            CFReadStreamSetProperty(readStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);
            CFWriteStreamSetProperty(writeStream, kCFStreamPropertyShouldCloseNativeSocket, kCFBooleanTrue);

            //Setup inpustream
            inputStream = (__bridge NSInputStream *)readStream;
            [inputStream setDelegate:self];
            [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [inputStream open];

            //Setup outputstream
            outputStream = (__bridge NSOutputStream *)writeStream;
            [outputStream setDelegate:self];
            [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [outputStream open];
       }
}
Run Code Online (Sandbox Code Playgroud)

我能够连接到服务器并发送和接收数据.但我想检查连接是否仍然存在.如果我从wifi路由器断开电缆,我仍然可以在流中发送数据,并且没有发生错误.

您可以在应用程序级别通过使用计时器发送一些消息并检查是否收到回复来解决此问题.但是你也可以用较低级别的TCP Keep-Alive技术来解决这个问题.

如何使用NSStream实现此功能?如何设置检查间隔?

我假设你通过TCP Keep-Alive检查流来关闭流时会得到一个NSStreamEventErrorOcurred?

我已经查过这篇文章了,但我无法弄明白: 在iOS中保持套接字连接存活

谢谢你的帮助!

tcp objective-c keep-alive nsstream ios

5
推荐指数
1
解决办法
7341
查看次数

标签 统计

keep-alive ×2

objective-c ×2

ios ×1

ios5 ×1

nsstream ×1

sockets ×1

tcp ×1

timeout ×1