Android TCP 套接字错误 [英] Android TCP Socket Error

查看:65
本文介绍了Android TCP 套接字错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我最近想在android上创建一个通过tcp连接到c#服务器的应用程序.服务器已创建并侦听端口已打开.

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.

问题是我的 android 应用程序导致的错误:

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

我读到我的应用程序在 manifest.xml 中缺少以下代码

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

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

我尝试了很多版本,包括ACCESS_NETWORK_STATE"、ACCESS_NETWORK_STATE"等

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.

我不知道该怎么办.

如果它也有帮助,应用程序本身的代码在这里:

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

这里是经过尝试更改的 Manifest.xml:

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>

推荐答案

您提供的 logcat 输出由于某种原因没有显示出来,但是您无法在主线程上执行网络操作(例如在 onCreate()).您需要将网络操作卸载到某种后台线程.

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.

这篇关于Android TCP 套接字错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆