有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

javasocket上的绑定。openconnection()

JRE 8\

如何选择将从中触发此请求的IP地址?服务器有多个绑定到它的IP地址和多个接口。我想为这个请求使用一个特定的

我有httpsurlconnection

URL url = new Url("x");
HttpsUrlConnection connection = (HttpsUrlConnection) url.openConnection();
...
connection.setSSLSocketFactory(SSLSocketFactory);
connection.connect();

我在SSLSocketFactory中重写了所有createSocket,并将源ip绑定到我选择的对象。问题是当我:

URL url = new Url("x");
HttpsUrlConnection connection = (HttpsUrlConnection) url.openConnection();
...
connection.setSSLSocketFactory(SSLSocketFactory);
connection.connect();

我看到socket已经创建,我的sslsocketfactory使用createSocket创建了socket。我可以绑定到其他ip地址,但我想在打开连接时覆盖源ip地址。我在哪里可以覆盖它


共 (1) 个答案

  1. # 1 楼答案

    HttpsUrlConnection
    

    使用

    SSLSocketFactory.createSocket();
    

    用类似于

    Factory extends SSLSocketFactory{
        private SSLSocketFactory basicFactory;
    
        Factory(SSLSocketFactory basicFactory){
            this.basicFactory = basicFactory;
        }
    ...
        @Override
        public Socket createSocket() throws IOException {
            Socket socket = basicFactory.createSocket();
            socket.bind(sourceIpAddress);
            return socket;
        }
    }
    

    不要使用super。createSocket(),因为它将抛出SocketException(“未实现未连接的套接字”),这将在HttpsClient中捕获,并使用NetworkClient使用java创建套接字。网具有随机源ip地址的套接字