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 が nodename または serv 名が提供されたか、または不明であることに失敗しました

では、どうすればそのエラーを処理できますか?

// -------------- 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:

その場合、ユーザーにネットワーク エラーを表示できます。ただし、インターネット接続が失われた場合は、ソケットを介してデータを送信しようとするまでわかりません。したがって、この問題を回避するには、Reachability を実装する必要があります。

Github プロジェクト

または Apple ヘルパー クラス。

Apple 到達可能性

接続がない場合と、必要に応じてユーザーに通知できる接続がある場合に通知されます。

私が正しく理解したことを願っています。

于 2013-08-12T20:27:26.767 に答える
1

待ってください...あなたのシナリオでは、iPhoneアプリは「ソケットサーバー」であり、PHPは「ソケットクライアント」です。私はこれを正しく理解していますか?

そう仮定すると...「@」でエラーメッセージをすでに沈黙させています。残っている唯一のことは、戻り値が false かどうかを単純に確認することです。

$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 に答える