如何检测网络断开?

时间:2011-11-30 19:55:57

标签: objective-c cocoa notifications

我正在为Mac OS X 10.7 / 10.6开发网络应用程序。我需要检测网络问题。当没有互联网连接时我需要检测的另一个词。我尝试使用连接到服务器的计时器添加一些方法,如果没有结果则显示消息。但我需要更多的实时解决方案。 是否有关于网络断开的系统通知?

1 个答案:

答案 0 :(得分:1)

如果您使用nsstreams,请执行

头:

@interface CrestronClient : UIViewController <NSStreamDelegate,UIAlertViewDelegate> {

    NSInputStream *inputStream;
    NSOutputStream *outputStream;

}
@end

.m文件:

init值通常在connect方法中或者加载

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, 192.168.1.1, 46651, &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];

    unsigned char connectByteArray1[] = {
        0x01, 0x00, 0x07, 0x7f, 0x00, 0x00, 0x01, 0x00, 0x03, 0x40
    };

    [outputStream write:connectByteArray1 maxLength:sizeof(connectByteArray1)];

然后你的委托方法:

- (void)stream:(NSStream *)theStream handleEvent:(NSStreamEvent)streamEvent {

    switch (streamEvent) 
    {
        case NSStreamEventOpenCompleted:
        {
            DDLogVerbose(@"Stream opened");
            break;
        }

        case NSStreamEventHasBytesAvailable:
        {
            if(!rawData) {
                rawData = [[NSMutableData data] retain];
            }
            uint8_t buf[1024];
            unsigned int len = 0;
            len = [(NSInputStream *)theStream read:buf maxLength:1024];
            if(len) {
                [rawData initWithBytes:buf length:len];                
            } else {
                DDLogVerbose(@"no buffer!");
            }
        }   
        case NSStreamEventErrorOccurred:
        {
            if ([theStream isKindOfClass:[NSInputStream class]]) {
                NSString* address = [self getAddress];
                NSString* myIPAdress = [NSString stringWithFormat:@"IP Address: %@", address];

                //[cClient updateRequest];
                UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Cant Connect" message:[NSString stringWithFormat:@"Cant connect to server: %@, Make sure you are connected to the proper wireless network.  Your Ip Address is %@",CCV.ipAddress,myIPAdress] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:@"Reconnect", nil];

                [alert show];
                [alert release];            
            }
            break;   
        }

        case NSStreamEventEndEncountered:
        {
            [theStream close];
            [theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
            [theStream release];
            break;
        }
        case NSStreamEventHasSpaceAvailable:
        {
            //DDLogVerbose(@"has space available");
            break;
        }

        case NSStreamEventNone:
        {
            DDLogVerbose(@"none");
            break;
        }

        default:
        {
            DDLogVerbose(@"Unknown event");
        }
    }
}

您可以看到有连接,未连接,断开连接的情况 这就是你需要的东西

相关问题