我正在Java中運行套接字編程,如下圖所示,這使得我的localhost和google.com之間發生套接字連接,但遇到以下錯誤。我不確定代碼中有什麼問題。從本地主機到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)
我在我的服務器和20個其他客戶端之間建立了一個套接字連接,這兩個客戶端都位於我的筆記本電腦上(可以認爲是多客戶端服務器),我試圖讓所有的客戶端在端口80上連接到谷歌服務器來自服務器的消息。來自服務器的消息將全部連接 - google.com,80。當我在我的服務器和客戶端之間建立了一個套接字連接時,它向所有具有不同端口號的客戶端提供了127.0.0.1的IP地址。這就是爲什麼我嘗試使用分配的端口號使用本地主機IP地址。 –
@AnuvratTiku由於您通過該地址將客戶端連接到服務器,因此您的服務器向客戶端提供了地址「127.0.0.1」。你仍然無法從127.0.0連接。1'到電腦以外的任何地方。 – Malt