gpt4 book ai didi

Android,SocketAddress 和套接字的问题。反向查找?

转载 作者:太空狗 更新时间:2023-10-29 14:30:46 32 4
gpt4 key购买 nike

我有一个关于 Android 的问题。我正在尝试使用代理连接到服务器,但没有成功。

我的这段代码在普通 Java 上运行良好。它只定义一个代理服务器并创建一个套接字,该套接字将使用该代理连接到谷歌。它发送一个简单的 GET 请求,然后显示响应。

import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
import java.net.SocketAddress;

public class Main {

public static void main(String[] args) {
try{
//create the proxy info
SocketAddress socketAddress = new InetSocketAddress("78.137.18.67" , 8364);
Proxy proxy = new Proxy(Proxy.Type.SOCKS, socketAddress);

// create the socket with the proxy
Socket socket = new Socket(proxy);

// connect to some address and send/receive data
socket.connect(new InetSocketAddress("www.google.com", 80));
socket.getOutputStream().write("GET /index.html HTTP/1.1\r\nHost: www.google.com\r\n\r\n".getBytes("UTF-8"));
byte result[] = new byte[1024];
socket.getInputStream().read(result);
socket.close();
System.out.println(new String(result));
}catch(Exception e){
e.printStackTrace();
}

}
}

Android 的问题是,使用类似的代码,InetSocketAddress 正在做一些奇怪的事情。它似乎对给定的 ip 进行了反向查找,然后使用代理创建的套接字尝试连接已解析的主机名,在本例中为 78-137-18-67.dynamic-pool.mclaut.net。

如果套接字可以将主机名解析回 ip 地址,这将不是问题(性能除外)。事实是这个主机名无法通过我的互联网连接解析为 ip 地址(我不知道其他人是否可以)。所以反向查找工作正常,但正常查找失败,所以当套接字尝试通过代理连接时,它会引发以下异常:

08-25 19:26:46.332: ERROR/Microlog(3526): 40274 SocketConnection

[ERROR] Error establishing connection java.net.SocketException: SOCKS connection failed: java.net.UnknownHostException: 78-137-18-67.dynamic-pool.mclaut.net

所以问题是,如果我提供了 IP 地址,为什么它会尝试连接主机名?有什么办法可以避免这种查找?我已经尝试使用 InetSocketAddress 的 createUnresolved,但在这种情况下,套接字在连接时挂起。

进行反向 DNS 查找以获取主机名(如果有),然后当套接字需要连接时,再次将主机解析为 IP 地址,这不是浪费时间、互联网连接等吗?

注意:这段代码只是一个例子,真正的应用程序不会以这种方式执行任何http请求。它使用二进制数据包。

最佳答案

为了防止反向查找,您可以使用 getByAddress(byte[]) 创建 InetAddress .

然后将 InetAddress 实例传递给 InetSocketAddress 构造函数。

或者,使用工厂方法 InetSocketAddress.createUnresolved(String,int)

关于Android,SocketAddress 和套接字的问题。反向查找?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7194970/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com