2016-07-20 8 views
1

Ich wollte vor kurzem eine Anwendung auf Android erstellen, die über TCP zu einem C# -Server verbindet. Der Server wird erstellt und hört auch zu. Ports werden geöffnet.Android TCP Socket Fehler

Das Problem ist der Fehler, die mein Android-Anwendung verursacht:

07-20 02:11:52.057 1262-1262/connector.de.connect2 W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
07-20 02:11:52.122 1262-1262/connector.de.connect2 D/MyApp: I am here 
07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err: java.net.SocketException: socket failed: EACCES (Permission denied) 
07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err:  at libcore.io.IoBridge.socket(IoBridge.java:619) 
07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err:  at java.net.PlainSocketImpl.create(PlainSocketImpl.java:198) 
07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err:  at java.net.Socket.startupSocket(Socket.java:584) 
07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err:  at java.net.Socket.tryAllAddresses(Socket.java:128) 
07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err:  at java.net.Socket.<init>(Socket.java:178) 
07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err:  at java.net.Socket.<init>(Socket.java:150) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at connector.de.connect2.MainActivity.onCreate(MainActivity.java:41) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.app.Activity.performCreate(Activity.java:6251) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1108) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2403) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2520) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.app.ActivityThread.-wrap11(ActivityThread.java) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1363) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.os.Handler.dispatchMessage(Handler.java:102) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.os.Looper.loop(Looper.java:148) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at android.app.ActivityThread.main(ActivityThread.java:5466) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at java.lang.reflect.Method.invoke(Native Method) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err: Caused by: android.system.ErrnoException: socket failed: EACCES (Permission denied) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at libcore.io.Posix.socket(Native Method) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err:  at libcore.io.IoBridge.socket(IoBridge.java:604) 
07-20 02:11:52.123 1262-1262/connector.de.connect2 W/System.err: ... 18 more 

ich gelesen, dass meine Anwendung in der manifest.xml

<uses-permission android:name="android.permission.INTERNET" /> 

Ich habe viele Versionen wie "den folgenden Code fehlt ACCESS_NETWORK_STATE "," ACCESS_NETWORK_STATE "usw.

Entweder ändert sich nichts und der Fehler wird weiterhin angezeigt oder die App stürzt vollständig ab.

Ich weiß nicht, was zu tun ist.

Wenn es auch den Code der Anwendung hilft selbst ist hier:

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

     Log.d("MyApp","I am here"); 
     try 
     { 
      Socket socket = new Socket("192.168.1.3", 1071); 
      PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()))); 
      pw.println("Hello"); 
      socket.close(); 
     } 
     catch (UnknownHostException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

Und hier die Manifest.xml mit den versuchten Änderungen:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="connector.de.connect2" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk android:minSdkVersion="14" /> 
    <use-permission android:name="android.permission.INTERNET" /> 
    <use-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <use-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

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

</manifest> 

Antwort

0

Die logcat Ausgang Sie doesn zur Verfügung gestellt haben Es wird aus irgendeinem Grund nicht angezeigt, aber Sie können keine Netzwerkoperationen für den Hauptthread ausführen (z. B. innerhalb von onCreate()). Sie müssen Netzwerkoperationen auf einen Hintergrundthread auslagern.

+0

Danke, ich würde Ihren Beitrag aufwerten, aber ich habe nicht das Minimum von 15 Punkten erreicht. Ich werde das später machen :) –

+0

Kein Problem, hoffentlich hast du es geschafft, das durch das Verschieben von Dingen aus dem Hauptthread zu überwinden. –