我正在为Mac OS X 10.7 / 10.6开发网络应用程序。我需要检测网络问题。当没有互联网连接时我需要检测的另一个词。我尝试使用连接到服务器的计时器添加一些方法,如果没有结果则显示消息。但我需要更多的实时解决方案。 是否有关于网络断开的系统通知?
答案 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");
}
}
}
您可以看到有连接,未连接,断开连接的情况 这就是你需要的东西