携帯電話からパソコンにデータを送るアプリをやっています。私はそれを行うためにソケットを使用しています。サーバーがオンラインの場合は機能しますが、間違ったIP /ポートで接続しようとしたり、サーバーが実行されていなかったりすると、アプリケーションがフリーズし、何もできなくなります。これは、携帯電話のクライアントがサーバーに接続しようとするためです。
私が作るメインクラスがあります:
Thread cThread = new Thread( new TCPClient( ip, port, message, context) );
cThread.start();
メッセージが送信されたとき、またはエラーが表示されたときにToastを作成する必要があるため、新しいTCPClientにコンテキストがあります。TCPClientクラスには次のものがあります。
public void run(){
try {
InetAddress serverAddr = InetAddress.getByName(s_ip);
Log.d("TCP", "C: Connecting...");
Socket socket = new Socket(serverAddr, s_port);
サーバーがオンラインの場合、次のようになります。
Log.d("TCP", "C: Sending: '" + s_msg + "'");
PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter(socket.getOutputStream())),true);
out.println(s_msg);
Log.d("TCP", "C: Sent.");
Log.d("TCP", "C: Done.");
しかし、サーバーがオフラインであるか、間違ったIP /ポートを設定すると、アプリケーションがフリーズします。しばらく何もできません。
しばらくしてからサーバーへの接続の試行を強制的に停止する解決策はありますか?たとえば、5秒後にアプリケーションがキャッチし、エラーが発生します。
AsyncTaskでこれを行おうとすると、クライアントがサーバーに接続しようとしてもアプリケーションは動作しますが、許容できない時間の後にエラーのあるトーストが表示されるので、クライアントがサーバーに接続できないときにエラーが発生するソリューションが必要ですたとえば5秒で。