2015-09-28 70 views
0

我想將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"; 

enter image description here

我試圖打開這個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) 
+0

該端口是否正確? –

+0

確保任何防火牆不限制來自外部ips的連接。 – WannaBeGeek

+0

我應該怎麼知道?我命令所有的東西正確,但不起作用,所以我問 – Pavel

回答

1
<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"/> 

使用192.168.0.33,而不是192.168.0.33 192.168.0.33是URL,而192.168.0.33是IP。

+0

我編輯我的問題 – Pavel

+0

使用192.168.0.33而不是http://192.168.0.33。 http://192.168.0.33是URL,192.168.0.33是IP。 –

+0

java.net.ConnectException:無法連接到/192.168.0.33(端口4444):連接失敗:ETIMEDOUT(連接超時) – Pavel

相關問題