关于#maui-android#的问题:想用MAUI开发安卓程序,TCP监听,模拟器运行时遇到Permission denied(语言-c#)

初学者,想用MAUI开发安卓程序,模拟器运行时遇到一个问题,百度了很多资料还是没解决,有说是权限问题,有说是进程问题,有说是模拟器问题的,但是都试了没解决,希望大拿看到能不吝赐教。

程序是在预置的程序里面,按钮的事件加了一个TCP监听,运行到_listener.Start()_时,报错System.Net.Sockets.SocketException: 'Permission denied',发布后的APK真机装上也出现同样的错误。

以下是AndroidManifest.xml配置

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <application android:allowBackup="true" android:icon="@mipmap/appicon" android:roundIcon="@mipmap/appicon_round" android:supportsRtl="true"></application>


</manifest>

以下是MainPage.xaml.cs

using System.Net;
using System.Net.Sockets;

namespace MauiApp5;

public partial class MainPage : ContentPage
{
    int count = 0;

    public MainPage()
    {
        InitializeComponent();
    }

    private void OnCounterClicked(object sender, EventArgs e)
    {

        NetworkAccess accessType = Connectivity.Current.NetworkAccess;

        if (accessType == NetworkAccess.Internet)
        {
            // Connection to internet is available
            DisplayAlert("ces", "123", "OK");
            TcpListener listener = new TcpListener(IPAddress.Any, 502);
          **listener.Start();**
        }


        count++;

        if (count == 1)
            CounterBtn.Text = $"Clicked {count} time";
        else
            CounterBtn.Text = $"Clicked {count} times";

        SemanticScreenReader.Announce(CounterBtn.Text);
    }
}

参考GPT和自己的思路:根据你提供的信息,系统会在使用TcpListener时报错“System.Net.Sockets.SocketException: 'Permission denied'”,这通常是由于在Android应用程序中未明确请求Internet权限所致。根据你提供的AndroidManifest.xml代码,应用程序已在清单文件中请求了"android.permission.INTERNET"权限,因此问题可能出现在其他方面。

建议你确认一下以下几点:

  1. 是否使用了最新版本的MAUI工具包?最近的版本可能已经修复了一些安全问题,因此更新一下可能会有所帮助。

  2. 在模拟器中是否已启用Internet连接?如果没有Internet连接,则无法使用TcpListener。

  3. 是否在模拟器中手动授予了应用程序的Internet权限?有些模拟器需要手动授予Internet权限,否则应用程序将无法使用网络连接。

  4. 尝试在实际的Android设备上运行应用程序,看看是否仍然存在此问题。如果在实际设备上运行时没有错误,则问题可能是与模拟器有关。

希望这些建议能够帮助你解决问题。