ios设置应用是否网络连接服务器,我如何知道我的客户端iOS应用是否已连接到服务器?...

遵循连接方法的人们的解决方案:

CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,

(CFStringRef) urlStr,

portNo,

&readStream,

&writeStream);

if (readStream && writeStream)

{

CFReadStreamSetProperty(readStream,

kCFStreamPropertyShouldCloseNativeSocket,

kCFBooleanTrue);

CFWriteStreamSetProperty(writeStream,

kCFStreamPropertyShouldCloseNativeSocket,

kCFBooleanTrue);

iStream = (NSInputStream *)readStream;

[iStream retain];

[iStream setDelegate:self];

[iStream scheduleInRunLoop:[NSRunLoop currentRunLoop]

forMode:NSDefaultRunLoopMode];

[iStream open];

oStream = (NSOutputStream *)writeStream;

[oStream retain];

[oStream setDelegate:self];

[oStream scheduleInRunLoop:[NSRunLoop currentRunLoop]

forMode:NSDefaultRunLoopMode];

[oStream open];

}

正在使用

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

像这样:

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

{

NSString *io;

if (theStream == iStream) io = @\">>\";

else io = @\"<

NSString *event;

switch (streamEvent)

{

case NSStreamEventNone:

event = @\"NSStreamEventNone\";

statusText.text = @\"Can not connect to the host!\";

break;

case NSStreamEventOpenCompleted:

event = @\"NSStreamEventOpenCompleted\";

pingButton.hidden = NO;

statusText.text = @\"Connected\";

break;

case NSStreamEventHasBytesAvailable:

event = @\"NSStreamEventHasBytesAvailable\";

if (theStream == iStream)

{

//read data

uint8_t buffer[1024];

int len;

while ([iStream hasBytesAvailable])

{

len = [iStream read:buffer maxLength:sizeof(buffer)];

if (len > 0)

{

NSString *output = [[NSString alloc] initWithBytes:buffer length:len encoding:NSASCIIStringEncoding];

NSData *theData = [[NSData alloc] initWithBytes:buffer length:len];

if (nil != output)

{

//do something with data

}

}

}

}

break;

case NSStreamEventHasSpaceAvailable:

event = @\"NSStreamEventHasSpaceAvailable\";

if (theStream == oStream)

{

//send data

uint8_t buffer[11] = \"I send this\";

int len;

len = [oStream write:buffer maxLength:sizeof(buffer)];

if (len > 0)

{

NSLog(@\"Command send\");

[oStream close];

}

}

break;

case NSStreamEventErrorOccurred:

event = @\"NSStreamEventErrorOccurred\";

statusText.text = @\"Can not connect to the host!\";

pingButton.hidden = YES;

break;

case NSStreamEventEndEncountered:

event = @\"NSStreamEventEndEncountered\";

statusText.text = @\"Connection closed by the server.\";

pingButton.hidden = YES;

[theStream close];

[theStream removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[theStream release];

theStream = nil;

break;

default:

event = @\"** Unknown\";

}

NSLog(@\"%@ : %@\", io, event);

}

(据我所知!)这篇文章的功劳归于deksa(尽管我不知道谁是创作者,因为我已经在网上见过几次了,包括SO)。如果您希望原始代码转到前面提到的链接,那么我对这段代码(pingButton,statusText)做了一些修改。

Apple Developer Site上也有一些信息。

就像我说过的,我在网上看到了一些类似的东西,但是现在我知道,连接后发生的一切都是“自动的”;例如,如果服务器用read()暂停,则automatically6ѭ将被自动调用,并且其中的所有代码都将运行。

现在我认为这个问题已经回答。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值