SocketException:使用 UdpClient 打开端口时“访问被拒绝”

2024-01-20

我正在尝试开始侦听 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 清单添加 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:“访问被拒绝”

并且没有提供其他细节。

我认为我的端口正在被另一个进程使用,但我检查了其中的许多端口(在 1-1024 范围之外),并且使用所有端口都给出了相同的结果。

是否还有其他原因导致此异常?您对如何解决问题有任何想法吗(例如如何找到可用端口)?

EDIT:

正如评论中所建议的,我尝试在运行时获得访问权限(尽管这不是必需的,Xamarin 在调试模式下默认授予 INTERNET 权限 https://learn.microsoft.com/en-us/xamarin/android/app-fundamentals/permissions?tabs=windows).

该行返回已授予权限的信息。

var havePermission = ContextCompat.CheckSelfPermission(this, Manifest.Permission.Internet);

尽管如此,我还是尝试在运行时手动获取访问权限

ActivityCompat.RequestPermissions(this, new String[] { Manifest.Permission.Internet }, 1);

结果和以前一样。


你可以尝试使用下面的代码吗? (改编自文档 https://learn.microsoft.com/en-us/dotnet/api/system.net.sockets.udpclient.beginreceive?view=netcore-3.1)

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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SocketException:使用 UdpClient 打开端口时“访问被拒绝” 的相关文章

随机推荐

  • 在 Haskell 中动态构建列表理解

    我很好奇是否可以在 Haskell 中动态构建列表理解 举个例子 如果我有以下内容 all pows a a b b a y b z y lt take a 0 z lt take b 0 我得到了我所追求的 Main gt List so
  • hashCode 等于 Integer.MIN_VALUE 的 Java 字符串

    是否存在 hashCode 完全等于 Integer MIN VALUE 的已知 Java 字符串 为哈希表编写测试有助于避免在执行余数运算之前在哈希码上运行 Math Abs 的常见错误 理想情况下 该字符串仅包含 ASCII 字符 但我
  • 在mysql中,显示数据库;命令未列出我的所有数据库

    我可以使用 HeidiSQL 访问我的所有数据库 但是如果我转到 mysql exe 窗口并使用显示数据库 11 个中只有 2 个出现 这些都是 127 0 0 1 上的数据库 有什么想法吗 您正在登录 HeidiSQLroot 所以它向您
  • Docker 中的 ng build --prod 非常慢

    当我尝试在 docker 中构建 angular7 项目时 大约需要 40 分钟 需要40分钟的线路是 ng 构建 prod 92 块资产优化 TerserPlugin 我在同一台笔记本电脑上在 docker 外部运行了 ng build
  • 创建 vscode 主题时如何自定义命令调色板颜色和键绑定

    为自己创建一个 VSCode 主题 我喜欢目前的颜色配置 但是当我打开命令调色板时 它是 透视 的 因此很难阅读 设计主题时如何配置调色板 V1 36为命令调色板 快速打开面板添加了这两个颜色自定义 quickInput backgroun
  • Gcc 隐藏来自包含的静态库的符号的可见性

    I have 一个共享库 比如说libShared so 其中包含一个类Bar 用一种方法int Bar do int d const 一个静态库 比如说libStatic a 其中包含一个类Foo 用一种方法int Foo act int
  • 如何在 C# 中更改 EMF+ 图像的颜色

    我正在尝试开发一种特殊类型的热图 其中标记的颜色取决于某些计算变量的值 我需要做的是更改现有 EMF Image 的颜色 以下代码在使用 png 或 wmf 文件时非常有用 但在使用 EMF 文件时 DrawImage 不会绘制任何内容 E
  • 如何创建非托管 Neo4j 扩展?

    我对我的项目有一些具体要求 因此我决定实现非托管 Neo4j 扩展 我在 Neo4j 文档中找到了这些信息 非托管扩展 http neo4j com docs stable server unmanaged extensions html
  • ARKit 人物遮挡样本是如何完成的?

    这可能是一个晦涩的问题 但我在网上看到了很多非常酷的示例 展示了人们如何使用 ARKit 3 中新的 ARKit 人物遮挡技术来有效地将人物与背景 分离 并对 人物 应用某种过滤 人 见 在查看苹果提供的源代码和文档时 我发现我可以检索se
  • scala 中 Magic 的 ColumnNotFound 问题

    我收到 play exceptions JavaExecutionException 尝试后在一段代码中出现 ColumnNotFound comments id 迁移到 MySql 而不是 memorydb Magic 对 Postgre
  • Graphics.MeasureString 允许过多空白

    我正在使用一个函数来调用要在区域内呈现的一段文本 该函数的基本工作原理是 Dim measureSize as Size Do myFont new Font myFont Name myFont Size 1 FontStyle Regu
  • 同时ajax请求angularjs?

    我想一次发送多个ajax请求 这是我的js代码 a class btn btn success Re Check a app controller customersCrtl function scope http timeout func
  • 是否可以缓存 lambda 表达式中计算的值?

    下面代码中的ContainsIngredients方法中 是否可以缓存p 成分value 而不是多次显式引用它 这是一个相当简单的示例 我只是为了说明目的而编写的 但我正在处理的代码引用了内部深处的值p eg p InnerObject E
  • glfwGetVideoMode(glfwGetPrimaryMonitor()) 不起作用

    所以我正在观看关于如何使用 Lwjgl 创建窗口的 java 教程 我到达了这部分 您可以在其中获得主监视器 ByteBuffer vidmode glfwGetVideoMode glfwGetPrimaryMonitor glfwSet
  • 如何设置默认的Windows套件(SDK)版本?

    我曾经在我的 C 应用程序中使用 Windows 8 1 SDK 一切正常 今天我安装了 Windows 10 SDK 但找不到一种方法将其设为默认 我可以在 Visual Studio 项目设置中对新的 SDK 路径进行硬编码 但这是非常
  • Xcode - 单元测试 - 针对 iOS 12 进行编译,但模块的最低部署目标为 13

    我在运行单元测试时遇到问题 问题位于代码行下方 testable导入PROJECT NAME Error Compiling for iOS 12 1 but module PROJECT NAME has a minimum deploy
  • AndroidcameraSource.stop()导致应用程序冻结

    我正在使用 google Vision API 构建一个具有二维码扫描仪的应用程序 读取二维码后 我无法停止相机 流量是MainActivity gt QrActivity一旦二维码收到检测 应用程序应返回到主活动 如果我不打电话camer
  • 重新定义/隐藏局部变量有多糟糕?

    在将遗留项目升级到 VS2015 时 我注意到存在很多错误 例如在函数内部重新定义局部变量 void fun int count applesCount cout lt lt Apples cost lt lt count 1 25 for
  • Rails - 有两个父母的嵌套资源

    假设我有一个带有两个父模型的子模型 Event has many tickets Person has many tickets Ticket belongs to Event Ticket belongs to Person 路线已映射
  • SocketException:使用 UdpClient 打开端口时“访问被拒绝”

    我正在尝试开始侦听 Android 设备上的 UDP 端口之一 我正在使用 Xamarin Forms 并在物理 Android 手机上测试它 public void StartListening int port 13000 Listen