• JAVA DatagramSocket通信


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 不想掉头发的程序员不是好程序员 2024-05-11 17:27 采纳率: 16.7% 浏览 1 首页/ 编程语言 / JAVA DatagramSocket通信 java DatagramSocket接收udp广播信息 接收不到电脑通过wifi热点连接另外一台电脑,feiq 就能通信 但是自己写的接收不到 防火墙关了也不行 有试过在同一局域网内的是可以通信 DatagramSocket d = null; String ipcon = ""; try { d = new DatagramSocket(2023); //创建数据包对象 byte[] buffer = new byte[1024 * 64]; DatagramPacket dd = new DatagramPacket(buffer, buffer.length); d.setSoTimeout(1000); d.receive(dd); 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 笑面虎 2024-05-11 17:27
      关注

      以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


      【解题思路】:检查网络设置和防火墙配置,确保两台电脑在同一子网内,并且没有阻止UDP通信。

      评论

      必须在同一子网下嘛
      feiq也不在统一子网是怎么通信的啊

      回复
    • 专家-皆知 2024-05-11 17:27
      关注

      检查端口设置、权限、广播地址以及数据包格式是否正确。

      以上回复有部分引自免费微信小程序:皆我百晓生。 如问题尚未解决,还请稍待,如有疑问请回复进一步沟通。

      评论
      专家-皆知 回复 不想掉头发的程序员不是好程序员 2024-05-11 17:28

      在处理UDP广播通信时,确保以下几个关键点:

      1. 确保端口是可用的,并且防火墙没有阻止UDP流量。
      2. 检查发送方是否正确地将广播消息发送到正确的网络地址(例如:255.255.255.255INADDR_BROADCAST)。
      3. 接收方的DatagramSocket应该设置为监听多播组或广播地址。

      以下是修复后的代码示例:

      import java.net.*;
      
      public class UDPRadioReceiver {
      
          public static void main(String[] args) throws Exception {
              // 创建一个DatagramSocket并绑定到指定端口
              DatagramSocket d = new DatagramSocket(2023);
      
              // 设置接收缓冲区
              byte[] buffer = new byte[1024 * 64];
      
              // 创建DatagramPacket对象
              DatagramPacket dd = new DatagramPacket(buffer, buffer.length);
      
              // 设置接收超时时间,单位毫秒
              d.setSoTimeout(1000);
      
              // 循环接收广播消息
              while (true) {
                  try {
                      // 在这里,我们使用INetAddress.ANY作为接收地址,
                      // 这样可以接收到所有发往本机的广播消息
                      dd.setAddress(InetAddress.getByName("255.255.255.255"));
                      dd.setPort(2023); // 监听的端口号
      
                      // 开始接收数据包
                      d.receive(dd);
      
                      // 解析接收到的数据
                      String receivedData = new String(dd.getData(), 0, dd.getLength());
                      System.out.println("Received: " + receivedData);
      
                  } catch (SocketTimeoutException ste) {
                      System.out.println("No data received within timeout period.");
                  }
              }
      
              // 关闭DatagramSocket
              d.close();
          }
      }
      

      这个简单的Java程序会一直接收来自广播地址255.255.255.255的广播消息。确保发送端也向这个地址发送广播消息,并且两个设备都在同一个局域网内。

      如果你的问题仍然存在,请检查以下事项:

      • 确保两台计算机都连接到了同一WiFi热点,并且没有其他防火墙限制。
      • 检查发送端的代码,确保它正在正确地将广播消息发送出去。

      如果你需要更多帮助,比如查看发送端代码示例,或者进一步调试,随时告诉我。

      回复
    • 关注

      下午好🌅🌅🌅
      本答案参考ChatGPT-3.5

      问题描述:

      使用 DatagramSocket 接收 udp 广播信息,但是接收不到,电脑已经通过 wifi 热点连接另外一台电脑,feiq 可以通信,但是自己写的接收不到。代码如下:

      DatagramSocket d = null;
      String ipcon = "";
      try {
          d = new DatagramSocket(2023);
          //创建数据包对象
          byte[] buffer = new byte[1024 * 64];
          DatagramPacket dd = new DatagramPacket(buffer, buffer.length);
          d.setSoTimeout(1000);
          d.receive(dd);
      }
      

      解决方案:

      1. 确认广播地址是否正确。

        可以使用网络调试工具查看广播地址是否正确。如果不确定,可在设置中设置广播地址。

      2. 确认网络是否正常。

        确认网络是否正常,可以 ping 网络,查看网络连接状态。

      3. 确认端口号是否正确。

        确认端口号是否正确,有可能是代码中的端口号设置不正确,需要检查代码中的端口号设置是否正确。

      4. 确认防火墙设置。

        如果是防火墙设置问题,需要在防火墙中添加允许 udp 端口的规则,或者直接关闭防火墙。

      5. 确认代码实现是否正确。

        通过阅读源代码,查看是否有错误的逻辑,是否有遗漏的设置,是否有在其他地方修改了变量等情况。

      修改后的代码如下:

      DatagramSocket d = null;
      String ipcon = "";
      try {
          d = new DatagramSocket(2023);
          //创建数据包对象
          byte[] buffer = new byte[1024 * 64];
          DatagramPacket dd = new DatagramPacket(buffer, buffer.length);
          d.setSoTimeout(1000);
          d.receive(dd);
          ipcon = dd.getAddress().toString();
          System.out.println(ipcon);
      } catch (Exception e) {
          e.printStackTrace();
      } finally {
          if (d != null) {
              d.close();
          }
      }
      

      参考链接:

      https://www.cnblogs.com/liulvshuang/p/12394598.html

      展开全部

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    The Stage Test for My MAPLE-ORAM project
    STM32F103VET6基于STM32CubeMX利用EXTI外部中断测量PWM频率
    qt中qstring合并字符串
    创意指南丨VR游览沉浸式空间体验
    Java 集合之 Queue 和 Deque
    Docker的网络模式
    Linux - 虚拟机的三种网络模式
    Hexagon_V65_Programmers_Reference_Manual(7)
    知识点17:关闭MMU时,cache的缓存策略是怎样的?
    【面试经典 150 | 滑动窗口】串联所有单词的子串
  • 原文地址:https://ask.csdn.net/questions/8102009