2015-09-28 72 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

相关问题