Android: Java AsyncTask 中的网络套接字异常
Android: Java Net Socket Exception inside AsyncTask
我 运行 我的 android 应用程序出现以下异常:
我正在进入异步任务但记录了这个异常。
03-15 16:49:21.456 16854-16892/com.ashwinbhy.phpwrite W/Ashwin﹕ java.net.SocketException: socket failed: EACCES (Permission denied)
我已将此权限包含在我的 manifest.xml 中:
<uses-permission android:name="android.permission.internet"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.access_network_state"/>
密码是:
try {
URL url = new URL("http://10.0.0.2/tt.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("bus_id", busid)
.appendQueryParameter("lat", lat)
.appendQueryParameter("lon", lon);
String query = builder.build().getEncodedQuery();
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
}
catch(Exception e){
Log.w("Ashwin",e.toString()+"inside the exception log");
return "error";
}
有人可以指出我哪里错了吗?
我正在添加日志:
03-15 17:15:42.140 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ open:http://10.0.0.2/tt.php
03-15 17:15:42.141 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: hostname=10.0.0.2; servname=(null); cache_mode=(null), netid=0; mark=0
03-15 17:15:42.141 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0
03-15 17:15:42.142 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [CDS][DNS] getAllByNameImpl netId = 0
03-15 17:15:42.142 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: hostname=10.0.0.2; servname=(null); cache_mode=(null), netid=0; mark=0
03-15 17:15:42.142 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0
03-15 17:15:42.143 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [CDS]rx timeout:10000
03-15 17:15:42.143 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [socket][3] connection /10.0.0.2:80;LocalPort=55951(15000)
03-15 17:15:42.143 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [CDS]connect[/10.0.0.2:80] tm:15
尝试为权限设置适当的大小写。它们区分大小写。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
更新
你的IP也不对。应该是,10.0.2.2
。所以你的URL会变成,
http://10.0.2.2/tt.php
在模拟器上应该可以正常运行。
我 运行 我的 android 应用程序出现以下异常: 我正在进入异步任务但记录了这个异常。
03-15 16:49:21.456 16854-16892/com.ashwinbhy.phpwrite W/Ashwin﹕ java.net.SocketException: socket failed: EACCES (Permission denied)
我已将此权限包含在我的 manifest.xml 中:
<uses-permission android:name="android.permission.internet"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.access_network_state"/>
密码是:
try {
URL url = new URL("http://10.0.0.2/tt.php");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000);
conn.setConnectTimeout(15000);
conn.setRequestMethod("POST");
conn.setDoInput(true);
conn.setDoOutput(true);
Uri.Builder builder = new Uri.Builder()
.appendQueryParameter("bus_id", busid)
.appendQueryParameter("lat", lat)
.appendQueryParameter("lon", lon);
String query = builder.build().getEncodedQuery();
OutputStream os = conn.getOutputStream();
BufferedWriter writer = new BufferedWriter(
new OutputStreamWriter(os, "UTF-8"));
writer.write(query);
writer.flush();
writer.close();
os.close();
conn.connect();
}
catch(Exception e){
Log.w("Ashwin",e.toString()+"inside the exception log");
return "error";
}
有人可以指出我哪里错了吗?
我正在添加日志:
03-15 17:15:42.140 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ open:http://10.0.0.2/tt.php
03-15 17:15:42.141 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: hostname=10.0.0.2; servname=(null); cache_mode=(null), netid=0; mark=0
03-15 17:15:42.141 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0
03-15 17:15:42.142 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [CDS][DNS] getAllByNameImpl netId = 0
03-15 17:15:42.142 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: hostname=10.0.0.2; servname=(null); cache_mode=(null), netid=0; mark=0
03-15 17:15:42.142 9003-9034/com.ashwinbhy.phpwrite D/libc-netbsd﹕ [getaddrinfo]: ai_addrlen=0; ai_canonname=(null); ai_flags=4; ai_family=0
03-15 17:15:42.143 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [CDS]rx timeout:10000
03-15 17:15:42.143 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [socket][3] connection /10.0.0.2:80;LocalPort=55951(15000)
03-15 17:15:42.143 9003-9034/com.ashwinbhy.phpwrite I/System.out﹕ [CDS]connect[/10.0.0.2:80] tm:15
尝试为权限设置适当的大小写。它们区分大小写。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
更新
你的IP也不对。应该是,10.0.2.2
。所以你的URL会变成,
http://10.0.2.2/tt.php
在模拟器上应该可以正常运行。