为什么我的套接字程序无法连接到互联网?

时间:2011-01-11 15:30:52

标签: sockets networking

我已经开始了本学期的第一个网络课程。 我的问题是每当我尝试将我的套接字连接到LAN外的主机时, 返回网络不可达错误。无论是BSD套接字还是Java套接字。 此外,我的nmap探测器也返回相同的错误。 一旦我在这里问了一个关于ping探测器的类似问题,答案就是我的局域网代理拒绝了ICMP请求。但是建立TCP连接没有ICMP请求吗? 另一方面,为什么我的浏览器可以连接到任何主机...虽然它使用相同的代理... 另外,(请原谅我这个长期的疑问)当我在我的套接字中将主机名称作为www.google.com时,将返回“未知主机”。但我的浏览器很高兴认识到同一个主机。

提前谢谢你......

import java.net.*;
import java.io.*;

class Whois {
public static void main(String args[]) throws Exception{
    int c;
    Socket s=new Socket(args[0],Integer.parseInt((args[1])));
    InputStream in=s.getInputStream();

    while( (c=in.read()) != -1) {
        System.out.print((char) c);
    }
    s.close();
}
}

3 个答案:

答案 0 :(得分:1)

不幸的是,这种行为可能有很多原因。

我最好的一点就是你在防火墙后面阻止了任何不会连接端口80的连接。在这种情况下,你可以尝试将你的程序连接到同一个网络,但是端口80.

不确定为什么你不会获得谷歌的名称解析。我猜这是你代码中的一个错误,但无法确定。

希望它有所帮助。

答案 1 :(得分:1)

调查并了解您的网络设置。你是如何连接到互联网的?您的工作站可能有default route指向某台计算机,可能正在执行Network Address Translation(NAT)和/或运行firewallproxy服务器。了解如何操作name resolution(DNS)。你了解这些,你可能会发现你需要做什么来连接外面。

另一方面,我们在问题中没有看到的代码中的错误也可能是:)

答案 2 :(得分:1)

可能存在阻止与外部主机的所有连接的防火墙,以及不查找外部主机名的内部DNS服务器。这就是为什么套接字程序既不能在主机名外查找也不能连接到外部服务的原因。

同样的限制适用于您的浏览器;只是您的浏览器设置为使用代理服务器。这意味着浏览器不直接在主机名外查找或连接到外部主机 - 它只查找代理名称并与代理服务器建立TCP连接。然后,代理正在代表您的浏览器进行主机名查找并与外界建立TCP连接。