4

当我连接到互联网时,它可以完美运行,但是当未连接互联网时,我会在以下几行中出错:

$socket_context = stream_context_create($options);

$this->smtp_conn = @stream_socket_client($host.":".$port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context);

我故意没有连接到互联网,show alertView当用户没有连接到互联网时,我想在 iOS 应用程序中向用户提供:

您没有连接到互联网

代替

警告:stream_socket_client()、php_network_getaddresses getaddrinfo 失败节点名或服务名提供或未知

那么我该如何处理这个错误呢?

// -------------- Code where I am setting NSStream in .m file :----------

#import "LoginViewController.h"

// --------------- here I set the delegate -------------
@interface LoginViewController () <NSStreamDelegate>

-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
{

}

任何帮助将不胜感激。

4

2 回答 2

2

假设您正在使用 NSStream 连接您的套接字。在您的委托方法中

-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode

如果套接字出现以下错误,您将收到通知:

case NSStreamEventErrorOccurred:

或者

case NSStreamEventEndEncountered:

在这种情况下,您可以向用户显示网络错误。但是,如果他们失去了互联网连接,直到您尝试通过套接字发送一些数据,您才会知道。所以要解决这个问题,你应该实现可达性。

Github 项目

或 Apple 助手类。

苹果可达性

当没有连接以及有连接允许您根据需要通知用户时,您将收到通知。

希望我理解正确。

于 2013-08-12T20:27:26.767 回答
1

等等...所以在您的场景中,iPhone 应用程序是“套接字服务器”,相对于 PHP 是“套接字客户端”。我做对了吗?

假设...您已经使用“@”使错误消息静音。剩下的唯一事情是您只需检查返回值是否为假,例如

$socket_context = stream_context_create($options);

$this->smtp_conn = @stream_socket_client($host.":".$port, $errno, $errstr, $timeout, STREAM_CLIENT_CONNECT, $socket_context);
if (false === $this->smtp_conn) {
    //Handle the error here
    echo 'You are not connected to internet';
}

如果使用“@”操作符让你感觉很脏(应该如此),你也可以在调用之前使用 set_error_handler() ,如果发生错误则在那里处理错误,最后将错误处理程序恢复到之前的状态。

于 2013-08-13T22:18:06.223 回答