我在互联网上搜索了很多,很多人遇到了和我一样的问题,但没有一个能解决我的问题。
我已经在genymotion emulater上测试了这段代码,但它在真正的Android设备上工作,即Nexus 4 API 21,它没有。
这是我的代码,其中我在ServerSocket = new ServerSocket(11100)中遇到异常;
protected String doInBackground(Void... params) {
Socket socket = null;
DataInputStream dataInputStream = null;
// DataOutputStream dataOutputStream = null;
try {
Log.i("aa","making a new server socket");
serverSocket = new ServerSocket(11100);
serverSocket.setSoTimeout(16000);
Log.i("service","listening to port");
socket = serverSocket.accept();
Log.i("service","connection accepted");
dataInputStream = new DataInputStream(
socket.getInputStream());
String messageFromServer = "";
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
messageFromServer = br.readLine();
Log.i("","trying to close server socket");
serverSocket.close();
Log.i("","server socket is closed");
return messageFromServer;
} catch(SocketTimeoutException e){//in case of a timeout exception
Log.i("","timeout exception ");
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
if (socket != null) {
try {
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if (dataInputStream != null) {
try {
dataInputStream.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return "1"; //means connection failed
}
这是我的Android清单
<uses-permission android:name="android.permission.VIBRATE"/>
<uses-permission android:name="android.permission.internet"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<service android:name="com.example.hassan.chat.services.MyService" />
<activity
android:name=".LoginActivity"
android:label="@string/app_name"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:label="@string/title_activity_main">
</activity>
<activity
android:name=".SignInActivity"
android:label="@string/title_activity_sign_in"
android:parentActivityName=".LoginActivity">
</activity>
</application>
这是我的logcat
04-10 20:17:00.178 11984-12213/com.example.hassan.chat W/System.err﹕ java.net.SocketException: socket failed: EACCES (Permission denied)
04-10 20:17:00.179 11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:623)
04-10 20:17:00.179 11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
04-10 20:17:00.179 11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.PlainServerSocketImpl.create(PlainServerSocketImpl.java:38)
04-10 20:17:00.179 11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.ServerSocket.<init>(ServerSocket.java:103)
04-10 20:17:00.179 11984-12213/com.example.hassan.chat W/System.err﹕ at java.net.ServerSocket.<init>(ServerSocket.java:74)
04-10 20:17:00.180 11984-12213/com.example.hassan.chat W/System.err﹕ at com.example.hassan.chat.classes.ListeningHttpSocket.doInBackground(ListeningHttpSocket.java:63)
04-10 20:17:00.180 11984-12213/com.example.hassan.chat W/System.err﹕ at com.example.hassan.chat.classes.ListeningHttpSocket.doInBackground(ListeningHttpSocket.java:39)
04-10 20:17:00.180 11984-12213/com.example.hassan.chat W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
04-10 20:17:00.180 11984-12213/com.example.hassan.chat W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
04-10 20:17:00.180 11984-12213/com.example.hassan.chat W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
04-10 20:17:00.180 11984-12213/com.example.hassan.chat W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
04-10 20:17:00.180 11984-12213/com.example.hassan.chat W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
04-10 20:17:00.181 11984-12213/com.example.hassan.chat W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
04-10 20:17:00.181 11984-12213/com.example.hassan.chat W/System.err﹕ Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied)
04-10 20:17:00.181 11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.Posix.socket(Native Method)
04-10 20:17:00.182 11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
04-10 20:17:00.182 11984-12213/com.example.hassan.chat W/System.err﹕ at libcore.io.IoBridge.socket(IoBridge.java:608)
04-10 20:17:00.182 11984-12213/com.example.hassan.chat W/System.err﹕ ... 12 more
答案 0 :(得分:2)
任何有兴趣的人: 我找到了解决方案,在android清单中,互联网权限应该在资本中 uses-permission android:name =“android.permission.INTERNET”而不是 uses-permission android:name =“android.permission.internet”
答案 1 :(得分:0)
您的手机是否与服务器连接在同一网络上?