2011-01-11 48 views
1

本學期我開始了我的第一個網絡課程。 我的問題是,每當我嘗試將我的套接字連接到局域網外的主機時,就會返回 網絡不可達錯誤。無論他們是BSD套接字還是Java套接字。 此外,我的nmap探針也返回相同的錯誤。 有一次,我在這裏詢問了有關ping探針的類似問題,答案是我的LAN代理拒絕了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(); 
} 
} 
+1

瀏覽器在通過的端口80上運行;而我的猜測是你的套接字在被阻塞的端口上運行。 – 2011-01-11 15:34:26

+0

我也嘗試過80端口。同樣的錯誤 – pflz 2011-01-11 15:47:41

+0

您可能需要發佈一些代碼,因爲它可能是任何數量的東西。 – 2011-01-11 15:52:30

回答

1

不幸的是,可能有許多原因的行爲。

我最好的拍攝是,你是一個的阻斷不打算端口80在這種情況下,任何連接,您可以嘗試與您的程序連接到同一個網絡防火牆的後面,但80端口

不確定爲什麼你不會得到谷歌的名稱解析。我猜這是你的代碼中的一個錯誤,但不能確定。

希望它有幫助。

1

調查並瞭解您的網絡設置。你如何連接到互聯網?您的工作站可能有一個default route指向某個機器可能做Network Address Translation(NAT)和/或運行firewall和可能proxy服務器。瞭解你的工作方式name resolution(DNS)。你可以找出你需要做的外部連接。

在另一方面,我們沒有在這個問題看代碼中的錯誤也有可能:)

1

有可能阻止到外部主機的所有連接防火牆和內部DNS服務器不查找外部主機名。這就是爲什麼你的套接字程序既不能查詢主機名也不能連接到外部服務。

相同的限制適用於您的瀏覽器;這只是您的瀏覽器設置爲使用代理服務器。這意味着瀏覽器不直接在主機名外部查找或連接到外部主機 - 它只查找代理名稱並與代理服務器建立TCP連接。代理然後代表您的瀏覽器進行主機名查找並建立到外部世界的TCP連接。