2012-01-11 195 views
2

我將創建一個套接字並獲取InputStream。這是我如何嘗試。無法創建套接字:java.net.ConnectException:連接被拒絕:connect

try { 
    final String serverIP = "111.111.111.111"; 
    final int serverPort = Integer.parseInt(server_port); 
    final InetAddress serverAd=InetAddress.getByName(serverIP); 
    final InetAddress localAd =InetAddress.getByName(local_ip); 
    final int localPort = 4040; 

    Socket socket = new Socket(serverAd, serverPort, localAd, localPort); 
} 

但有拋出異常,

java.net.ConnectException: Connection refused: connect 
    at java.net.PlainSocketImpl.socketConnect(Native Method) 
    at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351) 
    at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213) 
    at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200) 
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366) 
    at java.net.Socket.connect(Socket.java:529) 
    at java.net.Socket.connect(Socket.java:478) 
    at java.net.Socket.<init>(Socket.java:375) 
    at java.net.Socket.<init>(Socket.java:276) 
    at shootist.Porter.run(Porter.java:41) 

這裏的服務器發送了我的RTP數據和服務器端是確定和證實。我發送了邀請,並獲得了200。如果我的IP和端口出現問題,我認爲所有回覆都無法傳遞給我的IP和給定的端口。但它不會發生,因爲服務器向我發送對我的IP和給定端口號的響應。 我該如何解決這個問題?我錯在哪裏?

+0

將防火牆例外添加到服務器和客戶機上的端口號。更好的是,把你的防火牆從你的電腦中拿出來。 – Acn 2012-01-11 07:27:21

+0

謝謝。讓我知道如何在客戶端計算機上爲端口號添加防火牆例外。 – 2012-01-11 08:05:17

回答

9

A「連接被拒絕」的錯誤是指在服務器上的插座組收到您的連接請求,並故意拒絕接受它。發生這種情況的原因有兩個:

1)您試圖連接的端口上沒有運行偵聽套接字。

2)有一個監聽套接字,但其待處理連接的積壓已滿,所以當時沒有空間排隊請求。

要區分這兩者,請在每次嘗試之間嘗試重新連接幾次並延遲。如果你始終得到相同的錯誤,那麼#1可能是罪魁禍首。確保端口號是正確的。如果#2是罪魁禍首,你的重新連接最終有可能成功。

+0

完整全面的答案。 +1。 – 0xCAFEBABE 2012-01-11 07:41:04

+0

謝謝Remy.I改變了端口號並嘗試了。但同樣的錯誤:(。你會讓我知道如何創建一個成功的偵聽套接字(我不想讓它變成新的) – 2012-01-11 08:10:01

+0

你能解釋一下嗎?「但是它的待處理連接積壓已滿,所以沒有空間排隊。 ...「任何方式,當我發送邀請,然後服務器響應與200和服務器開始發送數據。我必須等到服務器發送響應並獲得相應的服務器的端口(因爲服務器的端口是在response.INVITE被髮送到另一個端口,並且套接字將在服務器決定的另一個端口上創建。)正如你所提到的,我試圖重新連接套接字,但是它失敗了,因爲發生了同樣的錯誤 – 2012-01-11 08:37:52

1

連接被拒絕意味着您嘗試連接到一個服務器,該服務器不在該端口上偵聽,或者太積壓以接受連接。

一個簡單的方法來測試,這是嘗試

telnet 111.111.111.111 4040 
+1

這不是可能導致錯誤的唯一條件。看到我的答案。 – 2012-01-11 07:33:21

+0

@ RemyLebeau-TeamB在積壓的好處。服務器必須以非常糟糕的方式重新記錄。 – 2012-01-11 07:49:19

+0

不一定。積壓可能有點過小,服務器的'accept()'速率可能會被編碼爲運行速度太慢。你永遠不知道。 – 2012-01-12 00:05:04

相關問題