android socket error,Android TCP Socket Error

开发者遇到Android应用尝试通过TCP连接服务器时遭遇`EACCES(Permission denied)`错误,原因在于主线程操作网络被禁止。解决方案是将网络请求移到后台线程。日志显示了`setContentView`前的Socket初始化导致的异常。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

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.(Socket.java:178)

07-20 02:11:52.122 1262-1262/connector.de.connect2 W/System.err: at java.net.Socket.(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

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:

package="connector.de.connect2"

android:versionCode="1"

android:versionName="1.0" >

android:allowBackup="true"

android:icon="@mipmap/ic_launcher"

android:label="@string/app_name"

android:supportsRtl="true"

android:theme="@style/AppTheme">

回答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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值