2017-03-17 7 views
0

私は、ソケットを介してサーバ(java)に接続するアンドロイドアプリケーションを作成しています。私が指定したポートを開く開始ボタンを含むサーバアプリケーションを作成しました。サーバに接続していますがサーバが起動していませんjava

私の質問は、クライアントが接続しようとしたときにどのように状況を処理することができますが、サーバが起動していないということです。 と私はまた、サーバーに

を開始することをお勧めクライアントのためのダイアログボックスを作成したい私はこのコードを試してみましたが、その自分のアプリケーションがハングます:

私はこれで本当に混乱して持っています!ここで

コードです:私はあなたが接続し、それを待つ必要があると思う

try { 
     cs = new Socket(IPADD,PORT); 
     if(cs.isConnected()) 
     { Toast.makeText(ipInfo.this,"Connected",Toast.LENGTH_SHORT).show(); 
      Intent inst = new Intent(ipInfo.this,homeActivity.class); 
      inst.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
      startActivity(inst); 
      finish(); 
     }else { 
      Toast.makeText(ipInfo.this,"Server is disconnected\nStart server in desktop",Toast.LENGTH_SHORT).show(); 
      } 
    }catch (IOException e) 
    {Toast.makeText(ipInfo.this,e.getMessage(),Toast.LENGTH_SHORT).show(); 
    }catch (Exception e) 
    {Toast.makeText(ipInfo.this,e.getMessage(),Toast.LENGTH_SHORT).show(); 
} 
+0

どのようにしてコードが機能しないのですか?それは間違っていますか? –

+0

いいえエラーはありませんが、アプリケーションをハングアップさせようとすると – Neel

+0

@SteveSmithはサーバーがまだ起動していないことを意味し、接続しようとしました – Neel

答えて

0

サーバーが応答していないため、コードが永続的にハングしていません。サーバーが応答していないため、UnknownHostException例外が発生します。これをキャッチし、キャッチ内に "Start Server"メッセージを表示します。

try { 
    Socket socket = new Socket(); 
    // 1000 is the timeout 
    socket.connect(new InetSocketAddress(IPADD, PORT), 1000); 
    Toast.makeText(ipInfo.this,"Connected",Toast.LENGTH_SHORT).show(); 
    Intent inst = new Intent(ipInfo.this,homeActivity.class); 
    inst.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); 
    startActivity(inst); 
    finish(); 
} catch (IOException e) 
    Toast.makeText(ipInfo.this,"Server is disconnected\nStart server in desktop",Toast.LENGTH_SHORT).show(); 
} catch (Exception e) { 
    Toast.makeText(ipInfo.this,e.getMessage(),Toast.LENGTH_SHORT).show(); 
} 
+0

ですので、私は未知のホスト例外をキャッチブロックに追加して、タイムアウトを設定する必要がありますか?そうでない場合は、そのコード部分を作ってください – Neel

+0

私はcatch部分で行っていますが、どこに 'setSoTimeout'を置くべきですか – Neel

+0

私の編集した答えを見てください。 –

0

- コールバックはありませんか? コードは言う:

/** 
* Returns the connection state of the socket. 
* <p> 
* Note: Closing a socket doesn't clear its connection state, which means 
* this method will return <code>true</code> for a closed socket 
* (see {@link #isClosed()}) if it was successfuly connected prior 
* to being closed. 
* 
* @return true if the socket was successfuly connected to a server 
* @since 1.4 
*/ 
public boolean isConnected() { 
    // Before 1.3 Sockets were always connected during creation 
    return connected || oldImpl; 
} 

そうをisConnected()はちょうどあなたがソケットをインスタンス化した後、実際にそうすぐに変更されていることはほとんどありません静的な値を返します。 Android用のネットワークライブラリはたくさんあります。これを行う必要が特にないかぎり、RetorfitやVolley(esp。retrofit)を使うことをお勧めします。あるいは単にOKHTTPクライアントを作ってこれを使うのでしょうか?

+0

私はいくつかの変更されたコード部分を提案することができます:これはいくつかの種類の新しい/ – Neel

0

あなたのソケットコードは決して動作しません。これは、スレッドまたはAsyncTaskで実行する必要があります。 Toast()を表示することはできません。

あなたは何をしていますか?

+0

「サーバーが起動していません」というメッセージをクライアントに表示する場合は、 – Neel

関連する問題