Сокет отправки Android: в чем разница между этими двумя способами инициализации сокета?

1

Способ 1:

InetAddress addr = InetAddress.getByName("192.168.0.101");
int port = 18250;
Socket socket = new Socket(addr, port);

Способ 2:

Socket socket = new Socket("192.168.0.101",18250);
Теги:
sockets

2 ответа

2
Лучший ответ

Они одинаковые:

java исходный код:

public
class Socket {

...

    public Socket(String host, int port)
    throws UnknownHostException, IOException
    {
    this(host != null ? new InetSocketAddress(host, port) :
         new InetSocketAddress(InetAddress.getByName(null), port),
         (SocketAddress) null, true);
    }


    public Socket(InetAddress address, int port) throws IOException {
    this(address != null ? new InetSocketAddress(address, port) : null, 
         (SocketAddress) null, true);
    }

...
}
  • 0
    Спасибо, это полезно.
  • 0
    Разница обнаруживается в InetSocketAddress. Первый конструктор, InetSocketAddress (String, int), занимает больше времени, чем другой, InetSocketAddress (InetAddress, int), потому что он должен проверить, что String является правильным адресом inet. Исходный код OpenJDK доступен по адресу grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/…
0

Для проекта в стиле HelloWorld между ними нет большой разницы. В более крупных проектах могут быть некоторые преимущества при использовании метода 1. Если у вас уже есть объект InetAddress, то с помощью конструктора Socket (InetAddress, int) избегает того, чтобы класс Socket проверял, является ли строка подходящим интернет-адресом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню