Предупреждение: stream_socket_client(), php_network_getaddresses getaddrinfo не удалось указать ни имя узла, ни имя сервера, ни неизвестно
Когда я подключен к Интернету, он работает отлично, но когда Интернет не подключен, я получаю сообщение об ошибке в следующих строках:
$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
{
}
Любая помощь будет оценена.
2 ответа
Предполагая, что вы используете NSStream для подключения ваших сокетов. В вашем методе делегата
-(void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode
Вы будете уведомлены, если сокет имеет ошибку с:
case NSStreamEventErrorOccurred:
или же
case NSStreamEventEndEncountered:
В этом случае вы можете показать ошибку сети вашему пользователю. Однако если они потеряют подключение к Интернету, вы не узнаете, пока не попытаетесь отправить некоторые данные через сокет. Таким образом, чтобы обойти эту проблему, вы должны реализовать Reachability.
или вспомогательный класс Apple.
Вы будете уведомлены, когда нет соединения, а также когда есть соединение, позволяющее уведомлять пользователя по мере необходимости.
Надеюсь, я правильно понял.
Подождите... так что в вашем сценарии приложение для 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() прямо перед вызовом, обрабатывать там ошибку, если она произойдет, и, наконец, восстановить обработчик ошибок в своем предыдущем состоянии.