Java中的SocketAddress和InetAddress有什么区别?

4

SocketAddres的设计目的不太清楚。据我所见,只有通过InetSocketAddress才有一个合理使用方式。这很令人困惑。


3
你有阅读相关文档(以及子类的文档)吗?有哪些部分的文档让你感到困惑或难以理解?请明确指出。 - Mark Rotteveel
3个回答

2

InetAddress将提供指定网站的IP地址 例如:

InetAddress ip=InetAddress.getByName("www.google.com");  

System.out.println("Host Name: "+ip.getHostName());  
System.out.println("IP Address: "+ip.getHostAddress());  

SocketAdress用于使用InetAddress和端口号创建端点上的Socket

 InetAddress addr = InetAddress.getByName("www.google.com");
    int port = 80;
    SocketAddress sockaddr = new InetSocketAddress(addr, port);

    Socket sock = new Socket();

    sock.connect(sockaddr);

1

来自SocketAddress文档:

这个类表示没有协议附加的套接字地址。作为一个抽象类,它旨在通过特定的、协议相关的实现进行子类化。

来自InetAddress文档:

这个类表示互联网协议(IP)地址。

因此,一个表示抽象类中没有任何协议的套接字,另一个表示 IP 地址。你可能正在寻找的是{{link3:InetSocketAddress}}(一个绑定到特定 IP/主机名和端口的套接字)。


补充一下Turing85所说的:在定义许多这些网络类时,有许多不同的底层网络协议:decnet、pupnet等等。它们都被IP协议的崛起所淘汰。因此,最初的套接字类被设计为处理许多不同类型的套接字,尽管现在我们只使用Internet协议。(但是!你应该小心允许IPv6——在许多地方这是一个要求) - PESMITH_MSFT

0

SocketAdress

这个类表示没有协议附加的套接字地址。作为一个抽象类,它旨在通过具体的、协议相关的实现进行子类化。

InetAdress

这个类表示互联网协议(IP)地址。

也许你想了解一下InetSocketAddress

这个类实现了一个IP套接字地址(IP地址+端口号)。它也可以是一对(主机名+端口号),在这种情况下,将尝试解析主机名。如果解析失败,则该地址被认为是未解析的,但仍然可以在某些情况下使用,例如通过代理连接。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接