[Java]套接字地址InetAddress讲解

package com.sjf;

import java.net.Inet4Address;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.UnknownHostException;
import java.util.Enumeration;

/**
 *
 * @author sjf0115
 *
 */
public class InetAddressExample {
    public static void main(String[] args)
    {
        // Get the network interfaces and associated for this host
        try
        {
            NetworkInterface networkInterface = null;
            // 获得该主机每一个接口的信息
            Enumeration<NetworkInterface> interfaceList = NetworkInterface.getNetworkInterfaces();
            if(interfaceList == null)
            {
                System.out.println("--No interfaces found--");
            }//if
            else
            {
                while(interfaceList.hasMoreElements())
                {
                     networkInterface = interfaceList.nextElement();
                     // 接口名称
                     System.out.println("Interface->"+networkInterface.getName());
                     // 获取与接口相关联的地址 根据主机的不同配置 可能包含IPV4或IPV6地址
                     Enumeration<InetAddress> inetAddressList = networkInterface.getInetAddresses();
                     if(inetAddressList == null)
                     {
                         System.out.println("--No address for this NetworkInterface--");
                     }//if
                     else
                     {
                         InetAddress address = null;
                         while(inetAddressList.hasMoreElements())
                         {
                             address = inetAddressList.nextElement();
                             // 对每个地址进行检测判断属于哪个IP地址子类
                             System.out.print(address instanceof Inet4Address ? "(v4)" : (address instanceof Inet6Address ? "(v6)" : "(?)"));
                             // 打印IP地址
                             System.out.println(":"+address.getHostAddress());
                         }//while
                     }
                }//while
            }
        }
        catch (Exception e)
        {
        }

        String host = "www.baidu.com";
        try
        {
            // 一个名字可能关联了多个数字地址 该方法返回一组与给定主机名相关联的所有地址的实例
            InetAddress[] addressesList = InetAddress.getAllByName(host);
            for(InetAddress address : addressesList)
            {
                System.out.println(address.getHostName()+"  "+address.getHostAddress());
            }//for
            // Determines the IP address of a host, given the host‘s name.
            InetAddress address2 = InetAddress.getByName(host);
            System.out.println(address2.getHostName()+" "+address2.getHostAddress());
            // Returns the local host.
            InetAddress address3 = InetAddress.getLocalHost();
            System.out.println(address3.getHostName()+" "+address3.getHostAddress());

        }
        catch (UnknownHostException e)
        {
            e.printStackTrace();
        }
    }
}

时间: 2024-09-30 09:51:25

[Java]套接字地址InetAddress讲解的相关文章

Java套接字Socket

这篇博客是本人学习<Java网络程序设计>书中第4章套接字的学习总结.初学者网友学习这篇Java套接字文章,如果难于理解文章前面理论部分,可以先运行后面的程序,边看运行后面的程序边理解前面的原理,这对初学者是最好的方法.所有源代码都在文章后面我的github链接代码中. --惠州学院 13网络工程 吴成兵 20160607 目录 1 目录 1 一 流套接字概述 二 服务器套接字ServerSocket 21 ServerSocket的工程过程 22 ServerSocket构造方法 23 Se

2017.07.09 Python网络编程之重用套接字地址

1.重用套接字地址: # -*- coding: UTF-8 -*-# 如果在某个端口上运行一个Python套接字服务器,连接一次后便终止了运行,就不能在使用这个端口了# !usr/bin/env python# Python Network Programming Cookbook --Chapter -1# This program is optimized for Python 2.7# It may run on any other version with/without modifi

[解决]通常每个套接字地址只允许使用一次

我们在做socket的开发的时候,经常会遇到这个错误:通常每个套接字地址 (协议/网络地址/端口)只允许使用一次 错误指示很明确:通信端口被占用了,导致通信无法进行. 但为什么端口被占用了呢?什么端口被占用了? 这里其实有一个大前提:你的程序中有没有指定socket通信端口? 如果指定了,解决办法很简单,每次通信完成手动释放就行了.下次通信重新建立连接. 如果没有指定,说明以下几点(可能你命中的是其中一点): 1.你的服务器开启的端口数太少: 2.连接释放等待时间太长: 3.你的socket通信

Java套接字编程实现群聊与私聊[原理版]

简介 运用Java套接字我们几乎可以完成一个网络聊天软件的小产品,本文不涉及UI部分,仅对原理部分用代码演示一下.一个可以多人聊天的小功能,在Linux系统上用telnet亲测可用. 服务器代码 package demo0811.demo3; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList; import java.util.

套接字地址结构

大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.每个协议簇抵都定义它自己的套接字地址结构 这些结构的名字均以sockaddr_开头,并以对应每个协议簇的唯一后缀结尾 1.IPv4套接字地址结构 IPv4套接字地址结构通常称为:网际套接字地址结构 它以sockaddr_in命名 struct  in_addr{ in_addr_t s_addr;//32位无符号整数类型 }; struct sockaddr_in{ unit8_t sin_len;//套接字地址结构长度 它是一个无符号

【UNIX网络编程(一)】套接字地址结构、网络字节序和地址转换函数

引言:套接字地址结构在网络编程的每个实现中都要用到,因此掌握套接字地址结构是以后编写网络程序的前提,地址结构可以在两个方向上传递:从进程到内核和从内核到进程.地址转换函数在地址的文本表达和他们存放在套接字地址结构中的二进制值之间进行转换. 大多数套接字函数都需要一个指向套接字地址结构的指针作为参数.不同协议都有自己的套接字地址结构.通用的套接字地址结构是sockaddr.IPv4套接字地址结构是定义在头文件<netinet/in.h>中的sockaddr_in,其POSIX定义如下: stru

IPv6套接字地址结构

struct in6_addr{ unit8_t sa_addr[16]; }; #define SIN6_LEN struct sockaddr_in6{ unit8_t sin6_len; sa_family_t sin6_family; in_port_t port; unit32_t sin6_flowinfo; struct in6_addr sin6_addr; unit32-t sin6_scope_id; }; 如果系统支持套接字地址结构中的长度字段,那么SIN6_LEN常值必须

新的通用套接字地址结构

作为IPv6套接字API的一部分而定义的新的套接字地址结构克服来现有struct sockaddr的一些缺点 不像struct sockaddr,新的struct sockaddr_storage足以容纳系统所支持的任何套接字地址结构 struct sockaddr_storage{ uni8_t ss_len; sa_family_t sa_family; }; sockaddr_storage类型提供的通用套接字地址结构相比sockaddr存在以下2点差别: 1)如果系统支持的任何套接字地址

套接字编程简介: IPV4套接字地址结构/ 通用套接字地址结构/ IPV6套接字地址结构

IPv4套接字地址结构通常也称为"网际套接字地址结构",它以sockaddr_in命名,定义在<netinet/in.h>头文件中. struct in_addr { in_addr_t s_addr;/*32-bit IPv4 address*/ /*network byte ordered*/ }; struct sockaddr_in { uint8_t sin_len;/*length if structure(16)*/ sa_family_t sin_famil