私は http サーバー コードを持っています (TJWS または NanoHTTPD の両方を試しました)。同じアプリケーションのクライアントは、ポート 8080 などで実行されているサーバーに接続します。
別の AsyncTask でサーバー オブジェクトを開始しているので、問題ないはずです。
NanoHTTPD は、TJWS ログから確認できる他の方法で完全に開始できませんでしたが、次のように表示されます。
server listening on 0.0.0.0/0.0.0.0 port:0 localport:8080
これは、サーバーが正常に起動したことを意味します。最初の質問は0.0.0.0バインド アドレスで問題ありませんか? 代わりに 127.0.0.1 にする必要があるということですか? それが初心者の質問である場合は申し訳ありません。
adb shell を使用してエミュレータに接続し、netstat を実行すると、次の行が表示されます。
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 127.0.0.1:5037 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:5555 0.0.0.0:* LISTEN
tcp 0 0 10.0.2.15:5555 10.0.2.2:52132 ESTABLISHED
tcp6 0 0 :::8080 :::* LISTEN
グーグルで、0 :::8080はサーバーがipv6とipv4の両方をリッスンしていることを意味し、それで問題ないことを知りました。
しかし、アクセスしようとしたときのクライアントコードからは、永遠に待ち続けます。
私のhttpClientコード
try {
URL url = new URL("http://0.0.0.0:"+8080+"/media");
URLConnection conn = url.openConnection();
InputStream is = conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line;
while((line = br.readLine()) != null){
Log.d("server", line);
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}