我想將Android客戶端連接到java服務器。我的Android客戶端在真實的手機和服務器上的本地主機。我試圖連接,但顯示錯誤:我無法從android clien連接到java服務器的套接字
09-28 11:08:44.399 14330-14371/smsagent.sedi.ru.sockets E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
Process: smsagent.sedi.ru.sockets, PID: 14330
java.lang.RuntimeException: An error occured while executing doInBackground()
at android.os.AsyncTask$3.done(AsyncTask.java:300)
at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
at java.util.concurrent.FutureTask.run(FutureTask.java:242)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.lang.SecurityException: Permission denied (missing INTERNET permission?)
at java.net.InetAddress.lookupHostByName(InetAddress.java:451)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at java.net.Socket.tryAllAddresses(Socket.java:109)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:65)
at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:61)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
at libcore.io.Posix.android_getaddrinfo(Native Method)
at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
at java.net.InetAddress.lookupHostByName(InetAddress.java:438)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at java.net.Socket.tryAllAddresses(Socket.java:109)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:65)
at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:61)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Caused by: android.system.ErrnoException: android_getaddrinfo failed: EACCES (Permission denied)
at libcore.io.Posix.android_getaddrinfo(Native Method)
at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
at java.net.InetAddress.lookupHostByName(InetAddress.java:438)
at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
at java.net.InetAddress.getAllByName(InetAddress.java:215)
at java.net.Socket.tryAllAddresses(Socket.java:109)
at java.net.Socket.<init>(Socket.java:178)
at java.net.Socket.<init>(Socket.java:150)
at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:65)
at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:61)
at android.os.AsyncTask$2.call(AsyncTask.java:288)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
我設置的Android權限:
<uses-permission android:name="ANDROID.PERMISSION.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
這是我的代碼:
private class MyAsync extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
try {
mSocket = new Socket(Constants.CHAT_SERVER_URL, 4444);
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyAsync myAsync = new MyAsync();
myAsync.execute();
}
它是服務器主機:
public static final String CHAT_SERVER_URL = "http://192.168.0.33";
和
我試圖打開這個IP在手機瀏覽器 - 打開一個空白頁,並沒有錯誤。 如果我嘗試從我的電腦上的Java核心客戶端連接 - 都很好。這意味着服務器運行良好。我嘗試從Android模擬器與10.0.0.2 IP連接 - 沒有幫助。
編輯 我添加權限
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
和應用程序不會壓壞,但錯誤
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ java.net.UnknownHostException: Unable to resolve host "http://192.168.0.33": No address associated with hostname
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:457)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.net.InetAddress.getAllByNameImpl(InetAddress.java:252)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.net.InetAddress.getAllByName(InetAddress.java:215)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.net.Socket.tryAllAddresses(Socket.java:109)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.net.Socket.<init>(Socket.java:178)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.net.Socket.<init>(Socket.java:150)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:65)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at smsagent.sedi.ru.sockets.MainActivity$MyAsync.doInBackground(MainActivity.java:61)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at android.os.AsyncTask$2.call(AsyncTask.java:288)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.util.concurrent.FutureTask.run(FutureTask.java:237)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.lang.Thread.run(Thread.java:818)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ Caused by: android.system.GaiException: android_getaddrinfo failed: EAI_NODATA (No address associated with hostname)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at libcore.io.Posix.android_getaddrinfo(Native Method)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at libcore.io.ForwardingOs.android_getaddrinfo(ForwardingOs.java:55)
09-28 11:36:36.829 28006-28046/smsagent.sedi.ru.sockets W/System.err﹕ at java.net.InetAddress.lookupHostByName(InetAddress.java:438)
該端口是否正確? –
確保任何防火牆不限制來自外部ips的連接。 – WannaBeGeek
我應該怎麼知道?我命令所有的東西正確,但不起作用,所以我問 – Pavel