gpt4 book ai didi

java - 构建从本地主机到 google.com 的套接字时出现错误

转载 作者:行者123 更新时间:2023-12-02 03:16:47 26 4
gpt4 key购买 nike

我正在java中运行套接字编程,我遇到了如下代码的问题,在我的本地主机和google.com之间建立套接字连接,但出现以下错误。我不确定代码中有什么问题。

If I am using LocalHost address as
String x = Inet4Address.getLocalHost().getHostAddress().toString();
then its running fine.

//code

public class SocketConnection {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

SocketConnection tl= new SocketConnection();
tl.connect();

}


public void connect()
{

try {
String x = Inet4Address.getLoopbackAddress().getHostAddress().toString();
InetAddress addr = InetAddress.getByName(x);
System.out.println(addr);
Socket socket = new Socket("www.google.com", 80, addr , 59645);
socket.close();
} catch (Exception e) {
e.printStackTrace();
}
}

错误信息是

/127.0.0.1
java.net.NoRouteToHostException: Can't assign requested address
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at java.net.Socket.<init>(Socket.java:434)
at java.net.Socket.<init>(Socket.java:286)
at SocketConnection.connect(SocketConnection.java:36)
at SocketConnection.main(SocketConnection.java:22)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)

最佳答案

“localhost”是一个特殊的虚拟接口(interface),将机器连接到其自身。您无法通过它启动与 google.com 的连接。如果您想要启动与 google.com 的连接,则必须通过以某种方式实际连接到互联网的界面来执行此操作。

如果将 Socket socket = new Socket("www.google.com", 80, addr, 59645); 替换为 Socket socket = new Socket("www.google.com"", 80);,您应该能够使用该目标的操作系统的默认接口(interface)打开该套接字,但随后将随机选择源端口。

如果你想控制源端口,可以这样做:Socket套接字 = new Socket("www.google.com", 80, InetAddress.getByName("0.0.0.0"), 59645);

关于java - 构建从本地主机到 google.com 的套接字时出现错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40191613/

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