我有一个 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();
}