You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从存储IP与主机名的链表中仅打印IP地址?

解决只打印IP地址而非主机名+IP的问题

嘿,我来帮你搞定这个需求!问题的核心在于Java的InetAddress对象默认的toString()方法会返回主机名/IP地址的格式,而我们需要单独提取纯IP字符串。结合你的UDP接收场景和链表存储的需求,分两步解决:

1. 从DatagramPacket中提取纯IP地址

当你通过DatagramSocket收到数据包后,不要直接打印packet.getAddress()(这会触发默认的toString逻辑),而是调用getHostAddress()方法,它会直接返回不带主机名的IP字符串:

while(true) {
    byte []buffer = new byte[1024];
    DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
    socket.receive(packet);
    
    // 提取纯IP地址,不会包含主机名
    String pureIp = packet.getAddress().getHostAddress();
    System.out.println("收到的IP地址: " + pureIp);
    
    // 如果需要把IP存入链表,直接存这个pureIp字符串即可
    // 比如你的workPls类里的链表方法:oks.addIpToLinkedList(pureIp);
}

2. 从链表中打印指定IP

如果你的链表已经存储了IP地址,根据存储类型做对应处理:

  • 如果链表存的是String类型的纯IP:直接遍历链表打印元素即可
  • 如果链表存的是InetAddress对象:遍历的时候调用getHostAddress()再打印

比如自定义链表的遍历示例:

// 假设你的链表节点类是LinkedNode,有getAddress()方法返回InetAddress
LinkedNode current = yourLinkedList.getHead();
while(current != null) {
    String ip = current.getAddress().getHostAddress();
    System.out.println(ip);
    current = current.getNext();
}

关键知识点

InetAddress类的两个常用方法区别:

  • toString():返回格式为 主机名/IP地址(如果能解析主机名的话)
  • getHostAddress():仅返回IP地址的字符串形式,不会附带主机名

这样就能完全满足你只打印IP地址的需求啦!

内容的提问来源于stack exchange,提问作者obinna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:57:25