gpt4 book ai didi

c# - 套接字异常 : "access denied" while opening port using UdpClient

转载 作者:行者123 更新时间:2023-12-04 23:49:59 26 4
gpt4 key购买 nike

我正在尝试开始监听 Android 设备上的一个 UDP 端口。我正在使用 Xamarin.Forms,并且正在物理 Android 手机上对其进行测试。

public void StartListening(int port = 13000)
{
ListenerPort = port;
udpClient = new UdpClient(ListenerPort);

udpClient.BeginReceive(new AsyncCallback(handleIncomingMessages), null);
}
此功能在应用程序启动时使用:
public partial class App : Application
{
[...]
protected override void OnStart()
{
network.StartListening(LISTENING_ON_PORT);
}
}
SO上有很多类似的问题,但其中大部分都是通过向android list 添加INTERNET权限来解决的。这是我的:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="1" android:versionName="1.0" package="com.companyname.ddand">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="28" />
<application android:label="ddAnd.Android" android:theme="@style/MainTheme"></application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
</manifest>
部署我的应用程序后我看到的是:

System.Net.Sockets.SocketException: 'Access denied'


并且没有提供其他细节。
我以为我的端口正在被另一个进程使用,但是我检查了其中的许多(在 1-1024 范围之外)并且使用它们都给出了相同的结果。
这个异常(exception)还有其他原因吗?您有什么想法可以解决问题(例如如何找到可用端口)?
编辑:
正如评论中所建议的,我试图在运行时获得访问权限(尽管这不是必需的, INTERNET permission is granted by default by Xamarin in Debug mode)。
此行返回已授予权限的信息。
var havePermission = ContextCompat.CheckSelfPermission(this, Manifest.Permission.Internet);
尽管如此,我还是尝试在运行时手动获取访问权限
ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Internet }, 1);
结果和以前一样。

最佳答案

你可以试试下面的代码吗? (改编自 documentation )

public void StartListening(int port = 13000)
{
ListenerPort = port;
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Any, ListenerPort);
udpClient = new UdpClient(ipEndPoint);

UdpState udpState = new UdpState();
udpState.e = ipEndPoint;
udpState.u = udpClient;

udpState.BeginReceive(new AsyncCallback(handleIncomingMessages), udpState);
}

关于c# - 套接字异常 : "access denied" while opening port using UdpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63341860/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com