2015-04-25 4 views
1

Я пытаюсь создать простое клиентское приложение Android, которое отправит строку на сервер.IOException: socket failed: ACCESS (Permission denied)

Клиент:

public class MainActivity extends ActionBarActivity { 

EditText et; 
Button btn; 

private Socket client; 
private PrintWriter printWriter; 
private String s; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    et = (EditText) findViewById(R.id.et); 
    btn = (Button) findViewById(R.id.btn); 

    btn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      s = et.getText().toString(); 
      et.setText(""); 

      try { 
       client = new Socket("192.168.1.14", 4444); 
       printWriter = new PrintWriter(client.getOutputStream(), true); 
       printWriter.write(s); 

       printWriter.flush(); 
       printWriter.close(); 
       client.close(); 
      } catch (UnknownHostException ex) { 
       Toast.makeText(getApplicationContext(), "UnknownHostException: " + ex.getMessage(), Toast.LENGTH_LONG).show(); 
      } catch (IOException ex) { 
       Toast.makeText(getApplicationContext(), "IOException: " + ex.getMessage(), Toast.LENGTH_LONG).show(); 
      } 

     } 
    }); 
} 
} 

Сервер:

public class Main { 

private static ServerSocket serverSocket; 
private static Socket socket; 
private static InputStreamReader inReader; 
private static BufferedReader bufferedReader; 
private static String s; 

public static void main(String[] args) { 
    char port = 4444; 

    try { 
     serverSocket = new ServerSocket(port); 
    } catch (IOException e) { 
     System.out.println("Could not listen on port " + port); 
    } 

    System.out.println("Server started. Listening on port" + port); 

    while (true) { 
     try { 
      socket = serverSocket.accept(); 
      inReader = new InputStreamReader(socket.getInputStream()); 
      bufferedReader = new BufferedReader(inReader); 
      s = bufferedReader.readLine(); 

      System.out.println(s); 
      inReader.close(); 
      socket.close(); 
     } catch (IOException e) { 
      System.out.println("Problen in message reading!"); 
     } 
    } 
} 

} 

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.test.eyalcherevatzki.clientserver" > 

<uses-feature android:name="android.hardware.type.watch" /> 
<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="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.DeviceDefault" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

LogCat:

04-25 12:27:30.386 18000-18000/com.test.eyalcherevatzki.clientserver V/Zygote﹕ Switching descriptor 45 to /dev/null 
04-25 12:27:30.386 18000-18000/com.test.eyalcherevatzki.clientserver V/Zygote﹕ Switching descriptor 9 to /dev/null 
04-25 12:27:30.386 18000-18000/com.test.eyalcherevatzki.clientserver D/dalvikvm﹕ Late-enabling CheckJNI 
04-25 12:27:30.436 18000-18000/com.test.eyalcherevatzki.clientserver D/ActivityThread﹕ handleBindApplication:com.test.eyalcherevatzki.clientserver 
04-25 12:27:30.436 18000-18000/com.test.eyalcherevatzki.clientserver D/ActivityThread﹕ setTargetHeapUtilization:0.75 
04-25 12:27:30.436 18000-18000/com.test.eyalcherevatzki.clientserver D/ActivityThread﹕ setTargetHeapMinFree:2097152 
04-25 12:27:30.476 18000-18000/com.test.eyalcherevatzki.clientserver I/dalvikvm﹕ DexOpt: illegal method access (call Landroid/content/res/TypedArray;.<init> (Landroid/content/res/Resources;[I[II)V from Landroid/content/res/XResources$XTypedArray;) 
04-25 12:27:30.476 18000-18000/com.test.eyalcherevatzki.clientserver I/dalvikvm﹕ Could not find method android.content.res.TypedArray.<init>, referenced from method android.content.res.XResources$XTypedArray.<init> 
04-25 12:27:30.476 18000-18000/com.test.eyalcherevatzki.clientserver W/dalvikvm﹕ VFY: unable to resolve direct method 82: Landroid/content/res/TypedArray;.<init> (Landroid/content/res/Resources;[I[II)V 
04-25 12:27:30.476 18000-18000/com.test.eyalcherevatzki.clientserver D/dalvikvm﹕ VFY: replacing opcode 0x70 at 0x0002 
04-25 12:27:30.506 18000-18000/com.test.eyalcherevatzki.clientserver I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getChangingConfigurations, referenced from method android.support.v7.internal.widget.TintTypedArray.getChangingConfigurations 
04-25 12:27:30.506 18000-18000/com.test.eyalcherevatzki.clientserver W/dalvikvm﹕ VFY: unable to resolve virtual method 584: Landroid/content/res/TypedArray;.getChangingConfigurations()I 
04-25 12:27:30.506 18000-18000/com.test.eyalcherevatzki.clientserver D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-25 12:27:30.506 18000-18000/com.test.eyalcherevatzki.clientserver I/dalvikvm﹕ Could not find method android.content.res.TypedArray.getType, referenced from method android.support.v7.internal.widget.TintTypedArray.getType 
04-25 12:27:30.506 18000-18000/com.test.eyalcherevatzki.clientserver W/dalvikvm﹕ VFY: unable to resolve virtual method 606: Landroid/content/res/TypedArray;.getType (I)I 
04-25 12:27:30.506 18000-18000/com.test.eyalcherevatzki.clientserver D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-25 12:27:30.546 18000-18000/com.test.eyalcherevatzki.clientserver I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawable, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawable 
04-25 12:27:30.546 18000-18000/com.test.eyalcherevatzki.clientserver W/dalvikvm﹕ VFY: unable to resolve virtual method 547: Landroid/content/res/Resources;.getDrawable (ILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; 
04-25 12:27:30.546 18000-18000/com.test.eyalcherevatzki.clientserver D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-25 12:27:30.546 18000-18000/com.test.eyalcherevatzki.clientserver I/dalvikvm﹕ Could not find method android.content.res.Resources.getDrawableForDensity, referenced from method android.support.v7.internal.widget.ResourcesWrapper.getDrawableForDensity 
04-25 12:27:30.546 18000-18000/com.test.eyalcherevatzki.clientserver W/dalvikvm﹕ VFY: unable to resolve virtual method 549: Landroid/content/res/Resources;.getDrawableForDensity (IILandroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; 
04-25 12:27:30.546 18000-18000/com.test.eyalcherevatzki.clientserver D/dalvikvm﹕ VFY: replacing opcode 0x6e at 0x0002 
04-25 12:27:30.646 18000-18000/com.test.eyalcherevatzki.clientserver I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: AU_LINUX_ANDROID_LNX.LA.3.5.2_RB1.04.04.02.065.012_msm8974_LNX.LA.3.5.2_RB1__release_AU() 
    OpenGL ES Shader Compiler Version: E031.24.00.13 
    Build Date: 03/28/14 Fri 
    Local Branch: mybranch2893136 
    Remote Branch: quic/LNX.LA.3.5.2_RB1 
    Local Patches: NONE 
    Reconstruct Branch: AU_LINUX_ANDROID_LNX.LA.3.5.2_RB1.04.04.02.065.012 + NOTHING 
04-25 12:27:30.676 18000-18000/com.test.eyalcherevatzki.clientserver D/OpenGLRenderer﹕ Enabling debug mode 0 
04-25 12:27:30.736 18000-18000/com.test.eyalcherevatzki.clientserver I/Timeline﹕ Timeline: Activity_idle id: [email protected] time:135458162 
04-25 12:27:30.736 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:30.736 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:30.736 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:30.736 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:36.166 18000-18000/com.test.eyalcherevatzki.clientserver W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection 
04-25 12:27:39.986 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:39.986 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:39.986 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:39.986 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:41.256 18000-18000/com.test.eyalcherevatzki.clientserver W/IInputConnectionWrapper﹕ showStatusIcon on inactive InputConnection 
04-25 12:27:44.976 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:44.986 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:44.986 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:27:44.986 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:28:24.376 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:28:24.376 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:28:27.236 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:28:27.236 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:28:27.256 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 
04-25 12:28:27.256 18000-18000/com.test.eyalcherevatzki.clientserver E/SpannableStringBuilder﹕ SPAN_EXCLUSIVE_EXCLUSIVE spans cannot have a zero length 

Я также добавил разрешение INTERNET.
Я на самом деле запускаю сервер на DrJava, это может быть проблемой?

Я получаю сообщение об ошибке: «IOException: socket failed: ACCESS (Permission denied)».

+0

show log cat ... –

+0

Можете ли вы разместить свой AndroidManifest.xml? –

+0

@NoName добавил log cat – AnDrOiD

ответ

0

Запишите этот фрагмент ниже setContentView()

if (android.os.Build.VERSION.SDK_INT > 9) { 
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); 
StrictMode.setThreadPolicy(policy); 
} 

или

class MyTask extends AsyncTask<Void, Void, Void> { 

@Override 
protected void onPreExecute() { 
    super.onPreExecute(); 
    } 

@Override 
protected Void doInBackground(Void... params) { 
    // Do your request 
} 

@Override 
protected void onPostExecute(Void result) { 
    super.onPostExecute(result); 

} 
} 
+0

Как насчет объяснения? – AnDrOiD

+0

http://www.androiddesignpatterns.com/2012/06/app-force-close-honeycomb-ics.html –

+0

отключить StrictMode совсем не очень хорошо. Попробуйте asynctask. –

0

Исключение NetworkOnMainThreadException будет выброшен, когда приложение пытается выполнить операцию сети на своем главном потоке ,

Таким образом, вам необходимо выполнить сетевую операцию в новом Thread or AsyncTask.

Ниже приведен пример,

public void onClick(View v) { 

    s = et.getText().toString(); 
    et.setText(""); 
    /*run socket related code in new thread*/ 
    new Thread(){ 
     public void run() { 
      try { 
       client = new Socket("192.168.1.14", 4444); 
       printWriter = new PrintWriter(client.getOutputStream(), true); 
       printWriter.write(s); 

       printWriter.flush(); 
       printWriter.close(); 
       client.close(); 
      } catch (UnknownHostException ex) { 
       ex.printStackTrace(); 
      } catch (IOException ex) { 
       ex.printStackTrace(); 
      } 
     } 
    }.start(); 


} 

В примере кода printStackTrace() будет печатать журнал трассировки, если происходит ошибка.

+0

Ну, теперь я не получил никакого исключения. Но я не вижу никаких изменений на сервере. Может быть, IP должен быть чем-то другим? – AnDrOiD

+0

во-первых, проверьте журнал, чтобы узнать, не выбрасывает ли какое-либо исключение. – yummy

+0

Выбрасывается «SocketException». – AnDrOiD

Смежные вопросы