/*
 * Copyright 2008-present MongoDB, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.mongodb;

import com.mongodb.annotations.Immutable;
import com.mongodb.lang.Nullable;

import java.io.Serializable;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;

Represents the location of a Mongo server - i.e. server name and port number
/** * Represents the location of a Mongo server - i.e. server name and port number */
@Immutable public class ServerAddress implements Serializable { private static final long serialVersionUID = 4027873363095395504L; private final String host; private final int port;
Creates a ServerAddress with default host and port
/** * Creates a ServerAddress with default host and port */
public ServerAddress() { this(defaultHost(), defaultPort()); }
Creates a ServerAddress with default port
Params:
  • host – hostname
/** * Creates a ServerAddress with default port * * @param host hostname */
public ServerAddress(@Nullable final String host) { this(host, defaultPort()); }
Creates a ServerAddress with default port
Params:
  • inetAddress – host address
/** * Creates a ServerAddress with default port * * @param inetAddress host address */
public ServerAddress(final InetAddress inetAddress) { this(inetAddress.getHostName(), defaultPort()); }
Creates a ServerAddress
Params:
  • inetAddress – host address
  • port – mongod port
/** * Creates a ServerAddress * * @param inetAddress host address * @param port mongod port */
public ServerAddress(final InetAddress inetAddress, final int port) { this(inetAddress.getHostName(), port); }
Creates a ServerAddress
Params:
  • inetSocketAddress – inet socket address containing hostname and port
/** * Creates a ServerAddress * * @param inetSocketAddress inet socket address containing hostname and port */
public ServerAddress(final InetSocketAddress inetSocketAddress) { this(inetSocketAddress.getAddress(), inetSocketAddress.getPort()); }
Creates a ServerAddress
Params:
  • host – hostname
  • port – mongod port
/** * Creates a ServerAddress * * @param host hostname * @param port mongod port */
public ServerAddress(@Nullable final String host, final int port) { String hostToUse = host; if (hostToUse == null) { hostToUse = defaultHost(); } hostToUse = hostToUse.trim(); if (hostToUse.length() == 0) { hostToUse = defaultHost(); } int portToUse = port; if (hostToUse.startsWith("[")) { int idx = host.indexOf("]"); if (idx == -1) { throw new IllegalArgumentException("an IPV6 address must be encosed with '[' and ']'" + " according to RFC 2732."); } int portIdx = host.indexOf("]:"); if (portIdx != -1) { if (port != defaultPort()) { throw new IllegalArgumentException("can't specify port in construct and via host"); } portToUse = Integer.parseInt(host.substring(portIdx + 2)); } hostToUse = host.substring(1, idx); } else { int idx = hostToUse.indexOf(":"); int lastIdx = hostToUse.lastIndexOf(":"); if (idx == lastIdx && idx > 0) { if (port != defaultPort()) { throw new IllegalArgumentException("can't specify port in construct and via host"); } try { portToUse = Integer.parseInt(hostToUse.substring(idx + 1)); } catch (NumberFormatException e) { throw new MongoException("host and port should be specified in host:port format"); } hostToUse = hostToUse.substring(0, idx).trim(); } } this.host = hostToUse.toLowerCase(); this.port = portToUse; } @Override public boolean equals(final Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } ServerAddress that = (ServerAddress) o; if (port != that.port) { return false; } if (!host.equals(that.host)) { return false; } return true; } @Override public int hashCode() { int result = host.hashCode(); result = 31 * result + port; return result; }
Gets the hostname
Returns:hostname
/** * Gets the hostname * * @return hostname */
public String getHost() { return host; }
Gets the port number
Returns:port
/** * Gets the port number * * @return port */
public int getPort() { return port; }
Gets the underlying socket address
Returns:socket address
/** * Gets the underlying socket address * * @return socket address */
public InetSocketAddress getSocketAddress() { try { return new InetSocketAddress(InetAddress.getByName(host), port); } catch (UnknownHostException e) { throw new MongoSocketException(e.getMessage(), this, e); } }
Gets all underlying socket addresses
Returns:array of socket addresses
Since:3.9
/** * Gets all underlying socket addresses * * @return array of socket addresses * * @since 3.9 */
public List<InetSocketAddress> getSocketAddresses() { try { InetAddress[] inetAddresses = InetAddress.getAllByName(host); List<InetSocketAddress> inetSocketAddressList = new ArrayList<InetSocketAddress>(); for (InetAddress inetAddress : inetAddresses) { inetSocketAddressList.add(new InetSocketAddress(inetAddress, port)); } return inetSocketAddressList; } catch (UnknownHostException e) { throw new MongoSocketException(e.getMessage(), this, e); } } @Override public String toString() { return host + ":" + port; }
Returns the default database host: "127.0.0.1"
Returns:IP address of default host.
/** * Returns the default database host: "127.0.0.1" * * @return IP address of default host. */
public static String defaultHost() { return "127.0.0.1"; // NOPMD }
Returns the default database port: 27017
Returns:the default port
/** * Returns the default database port: 27017 * * @return the default port */
public static int defaultPort() { return 27017; }
Determines whether this address is the same as a given host.
Params:
  • hostName – the address to compare
Returns:if they are the same
Deprecated:use the equals(Object) method instead
/** * Determines whether this address is the same as a given host. * * @param hostName the address to compare * @return if they are the same * @deprecated use the {@link #equals(Object)} method instead */
@Deprecated public boolean sameHost(final String hostName) { return equals(new ServerAddress(hostName)); } }