Мы используем OkHttp3 Client для отправки запросов на сервер Jetty Http / 2.Мы хотели бы направить запросы через определенный сетевой интерфейс от клиента.
Мы попытались переопределить метод createSocket с двумя аргументами (хост InetAddress, int port), как показано ниже
client = new OkHttpClient.Builder()
.socketFactory(new SocketFactory() {
final SocketFactory defaultSocketFactory = SocketFactory.getDefault();
@Override
public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException {
LOG.info("4 argument create socket invoked {} {} {} {}", address, port, localAddress, localPort);
return defaultSocketFactory.createSocket(address, port, localAddress, localPort);
}
@Override
public Socket createSocket(String host, int port, InetAddress localHost, int localPort) throws IOException, UnknownHostException {
LOG.info("Another 4 argument create socket invoked {} {} {} {}", host, port, localHost, localPort);
return defaultSocketFactory.createSocket(host, port, localHost, localPort);
}
@Override
public Socket createSocket(InetAddress host, int port) throws IOException {
LOG.info("Expected Create socket invoked {} {} ", host, port);
return defaultSocketFactory.createSocket(InetAddress.getByName(dnsIPAddress), port);
}
@Override
public Socket createSocket(String host, int port) throws IOException, UnknownHostException {
LOG.info("Other 2 Argument Create socket invoked {} {} ", host, port);
return defaultSocketFactory.createSocket(host, port);
}
})
.connectTimeout(6000, TimeUnit.MILLISECONDS)
.retryOnConnectionFailure(true)
.readTimeout(5000, TimeUnit.MILLISECONDS)
.writeTimeout(5000, TimeUnit.MILLISECONDS)
.build();
Для краткости построения контекст SSL опущен.
Вышеуказанный способпереопределения правильно?Мы не даем ожидаемых результатов?
Нам нужно, запросы должны маршрутизироваться через указанный IP-адрес и порт со стороны клиента.