Android:java.net.DatagramSocket.bind:无效参数异常

2023-11-25

背景:我正在编写一个简单的 UDP 应用程序来 ping 一个测试版服务器,我每分钟左右管理一次,告诉我它仍在运行(对于那些想知道的人,我无法在服务器上启用 ping)。我计划在手机上运行此命令,以便在服务器不再响应时向我发出警告。

我正在尝试使用看似简单的 java.net.DatagramSocket :

    try
    {
        socket = new DatagramSocket();
        socket.bind(null);
    } 
    catch (SocketException e)
    {
        System.out.println(e.toString());
        throw e;
    }

我还想说,我已经通过 android 清单启用了互联网权限,如果我删除使用子句来执行此操作,我会收到权限错误,所以我确信它工作正常。当我将此代码下载到 Android 虚拟设备 (AVD) 并执行它时,在调用 bind() 时,我遇到了以下异常:

03-17 19:07:39.401: INFO/System.out(338): java.net.BindException: 参数无效

根据this文档中,空参数是正确的:

公共无效绑定(SocketAddress localAddr)

自:API 级别 1

将此套接字绑定到 localAddr 指定的本地地址和端口。如果该值为空,则使用有效本地地址上的任何空闲端口.

但由于不信任文档,我决定枚举设备上的 IP 地址,如下所示:

    ArrayList<NetworkInterface>  allInterfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
    
    NetworkInterface eth = allInterfaces.get(0);
                
    InetSocketAddress addr = new InetSocketAddress(eth.getInetAddresses().nextElement(), port);
    
    try
    {
        socket = new DatagramSocket();
        socket.bind(addr);
    } 
    catch (SocketException e)
    {
        System.out.println(e.toString());
        throw e;
    }

当我单步执行代码时,它工作得很好,我可以看到 AVD 上的两个 IP 地址,但我在 bind() 调用上得到了完全相同的异常。有人看到我可能会错过什么吗?我将继续研究并希望发布解决我自己问题的方法,但我希望有人能够为我解决这个问题。


[编辑:如果您看到我之前的回复,我犯了一个经典的调试错误,在一个测试中更改了两个变量,而另一个测试解决了我的问题。]

我发现了问题。这是我声明 DatagramSocket 的方式似乎导致了问题。如果我使用 DatagramChannel 按以下方式打开 DatagramSocket,则 bind() 调用成功。

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

Android:java.net.DatagramSocket.bind:无效参数异常 的相关文章

随机推荐

  • python中的子句提取/长句分割

    我目前正在开展一个涉及句子向量的项目 来自 RoBERTa 预训练模型 当句子很长时 这些向量的质量较低 并且我的语料库包含许多带有子句的长句子 我一直在寻找子句提取 长句分割的方法 但令我惊讶的是 没有一个主要的 NLP 软件包 例如 s
  • 如何将 javascript 字符串分解为每五个单词换行一次?

    我有一个不寻常的请求 给定一个如下所示的字符串 var a This is a sentance that has many words I would like to split this to a few lines 我需要每五个单词插
  • 隐式 DataTemplate 不起作用

    为什么下面隐含DataTemplate不行 仅内嵌注释DataTemplate将工作 注意 如果我删除两者DataTemplates 我看到一个字符串表示形式ProductListView完整类型名称
  • 日志文件中写入什么内容?

    我的问题很简单 将什么写入日志 有什么约定吗 我必须放入什么 由于我的应用程序必须发布 我希望有友好的日志 大多数人都可以阅读这些日志 而无需询问它是什么 我已经有了一些想法 比如时间戳 每个函数 方法的唯一标识符等 我想要几个日志级别 例
  • Android USB鼠标右键单击正确行为(ICS)

    插入 android ics 的 USB 鼠标的右键单击是否始终指定为 后退 按钮 我有一台平板电脑 但没有 我想删除状态栏 并且仍然能够通过 USB 鼠标使用平板电脑 有谁知道在哪里 如何配置 android 中的行为 迟到的答案 但答案
  • C++ 重写异常::what()

    我有一个自定义异常 class RenterLimitException public std exception public const char what 重写what 的正确方法是什么 现在 我在头文件中创建了这个自定义 并希望覆盖
  • 实体框架多租户共享数据架构:单列、多个外键

    我有以下数据结构 property Notification abstract class BindableBase base class for all tenant scoped objects abstract class Tenan
  • C++ 性能,for 与 while

    一般来说 或根据您的经验 for 和 while 循环之间的性能是否存在差异 如果它们是双重 三重嵌套怎么办 矢量化 SSE 是否受 g 或 Intel 编译器中的循环变体影响 谢谢 Here是一篇关于这个主题的好论文
  • 使用可变参数模板显式模板实例化

    我有几个模板类Impl 使用一些抽象方法 部分在 CPP 文件中实现 因此我需要显式实例化我的模板以便链接器找到它 如下所示 template class Impl
  • 使用 GROUP BY 连接单列字段

    有没有什么方法可以通过对字段进行分组来组合 连接一列中的字段 例如 col1 col2 1 aa 1 bb 1 cc 2 dd 2 ee 我想查询类似的内容 select col1 concat col2 from tableName gr
  • django 模板中的变量减法

    是可以写的 myval add 5 myval add value 乃至 myval add 5 但是 我不知道应该输入什么来添加值 1 之类的 myval add value 可悲的是 这不起作用 您需要使用双引号 myval add 5
  • 合并 XML 文档 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我需要 合并 两个 XML 文档 覆盖重叠的属性和元素 例如 如果我有文件1
  • ConfigurationManager 不保存设置

    这是我正在使用的代码 private void SaveConfiguration if txtUsername Text txtPassword Text ConfigurationManager AppSettings Username
  • Netbeans - 安装 SASS

    我曾多次尝试在 netbeans 上安装 SASS 我已遵循以下教程 http kgagliardo com blog netbeans sass windows 7 创建并尝试保存 SASS 文件时出现以下错误 并且未创建 CSS 文件
  • 自定义 UIControl 和手势识别器

    我正在尝试创建一个类似于滑块的自定义 UIControl 该控件是一个视图的子视图 该视图还附加了一个点击手势识别器 现在的问题是这个点击手势识别器取消了发送到我的控件的触摸 有没有办法可以从我的控件的代码中覆盖它 如果我查看 iOS 中的
  • 如何使 macOS 框架可在 Nix 环境中 clang?

    我在 macOS 10 13 5 上学习 Rust 编程 并使用 Nix 来控制我的开发环境 一些行动 例如包括jsonwebtoken库或安装cargo watch模块 导致构建需要似乎未安装的 macOS 框架 我收到此错误消息 not
  • 在 VideoView 中播放视频时 Android 后退按钮不起作用

    在 VideoView 中播放视频时 Android 后退按钮不起作用 但它在播放视频之前有效 我正在为 VideoView 使用自定义 MediaController 我尝试使用调度按键事件 它不起作用 使用 VideoView 的 Ac
  • 将 ggplot2 颜色条刻度线更改为黑色

    在我的一些图中 我发现很难看到颜色条中的刻度线 我还没有找到改变蜱虫颜色的记录方法 所有示例似乎都集中在更改标签或根本不绘制刻度线 是否可以 Data require ggplot2 require grid n lt 100 x lt y
  • 给定一个时间,如何找到一个月前的时间

    给定一个时间 如何查找一个月前的时间 strtotime 1 month timestamp http php net manual en function strtotime php
  • Android:java.net.DatagramSocket.bind:无效参数异常

    背景 我正在编写一个简单的 UDP 应用程序来 ping 一个测试版服务器 我每分钟左右管理一次 告诉我它仍在运行 对于那些想知道的人 我无法在服务器上启用 ping 我计划在手机上运行此命令 以便在服务器不再响应时向我发出警告 我正在尝试