Android TCP Socket Error

拟墨画扇 提交于 2019-12-11 12:57:47

问题


i recently wanted to create an application on android which connects to a c# server via tcp. The Server is created and listens also Ports are opened.

The Problem is the error which my android application causes:

    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

I read that my application is missing the following code in the manifest.xml

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

I tried many versions including "ACCESS_NETWORK_STATE", "ACCESS_NETWORK_STATE" etc.

Either nothing changes and the error still appears or the app crashes completely.

I dont know what to do.

If it also helps the code of the application itself is here:

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();
        }
    }

And here the Manifest.xml with the tried changes:

<?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>

回答1:


The logcat output you've provided doesn't show it for some reason, but you cannot perform network operations on the main thread (e.g. inside of onCreate()). You need to offload network operations to a background thread of some kind.



来源:https://stackoverflow.com/questions/38470524/android-tcp-socket-error

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!