2014-01-28 125 views
10

我已經設置了一個websocket與學習目的聊天。一切正常,但我無法解決這個問題。通過局域網連接websocket服務器IP地址

當我提供127.0.0.1作爲客戶端連接的地址時,我可以從託管它的計算機訪問服務器,但是當我將地址更改爲託管計算機的實際LAN地址時,我無法甚至可以從主機本身連接服務器。請參閱:

Server = new FancyWebSocket('ws://127.0.0.1:9300');似乎工作,但只從代管服務器的計算機可以連接(原因很明顯)

Server = new FancyWebSocket('ws://192.168.1.3:9300');沒有計算機可以連接。我確認192.168.1.3是主機的LAN地址。

我需要在那裏放置什麼地址以便本地網絡中的其他計算機可以連接?

+0

也許運行websocket服務器的計算機的防火牆阻塞了ingoing端口? –

+0

有些信息會很有用:你使用什麼操作系統?什麼路由器/交換機連接?任何防火牆/防病毒軟件?基本上通過LAN地址連接應該工作 – Flixer

+0

@Flixer我使用Windows 7和計算機正在通過家庭路由器連接。我認爲防火牆不是問題,因爲在第二種情況下'Server = new FancyWebSocket('ws://192.168.1.3:9300');'甚至連計算機'192.168.1.3'都不能連接到它本身,因爲以及當我從網絡上的其他計算機訪問'http:// 192.168.1.3 /'時,我被允許進入主機計算機'192.168.1.3'的主頁,所以這讓我相信這不是防火牆問題。 –

回答

5

我解決了這個問題。既然這是兩個答案的組合,我認爲唯一公平的做法是添加另一個答案和解釋。

正如@Mehran建議,我的服務器地址設置爲127.0.0.1而不是網絡地址。將其更改爲192.186.1.3後,我能夠從服務器本身進行連接,但其他機器無法連接。然後,我按照@ vtortola答案中提供的指南中的步驟,將新的入站規則添加到服務器的防火牆中,以便允許使用該端口。

最後現在所有的工作,非常感謝你幫助我。 +代表大家!

+0

+代表您的答案! :) –

1

這裏有一些東西,而解決此問題,你可以放心地假設:

  • 如果該服務能夠對127.0.0.1工作在同一臺機器上,你可以認爲這個問題是不是在代碼或PHP配置

  • 如果您在服務器嘗試綁定到192.168.1.3:9003時未收到錯誤,則可以安全地推測該服務正在運行。嘗試打開資源監視器以查看它是否實際在此端口上偵聽以確認。爲此,請轉到Windows的「開始菜單」,然後在「搜索程序和文件」框中鍵入「資源監視器」。打開資源監視器後,單擊「概述」選項卡並找到服務器進程的名稱(如果使用CLI,通常爲'php')。選擇您的流程後,切換到「網絡」選項卡,您將能夠看到它是否在「TCP連接」面板內的任何端口上進行偵聽。這將顯示您列出的地址和端口,以及連接到該服務的任何客戶端的遠程地址和端口。

  • 如果您知道服務器正在運行,並且您知道它正在主動監聽預期的地址和端口,那麼很可能是Windows或路由器中的防火牆問題。請注意,即使192.168.1.3是分配給您的接口的IP,但這不是本地IP,並且與192.168.1.3之間的所有通信仍將通過Windows防火牆,包括如果在同一臺計算機上發送。如果你已經在這個時候,我強烈建議先檢查你的Windows防火牆。如果它不是Windows防火牆,請檢查您的路由器,看它是否阻塞端口,並檢查端口轉發和其他設置,以確保路由器不會干擾其他設備。我們可能會在這裏幫助你解決路由器問題,但是你的路由器的手冊很方便。

HTTP是一個常見的服務端口,所以很可能路由器不會阻塞端口,並且如果您使用IIS,Windows可能會自動打開它。 9300不是一個普通的端口,所以在任何情況下它都不可能被默認打開,除非你的默認值是「all in」,這實際上意味着你不使用防火牆。

您可能嘗試的另一件事(如果可能的話)是關閉現有HTTP服務並使用您的Websocket服務綁定到端口80,或者如果可能的話(並謹慎行事)完全關閉您的Windows防火牆,足夠連接。

+0

非常詳細的信息,謝謝!我檢查了資源監視器,它正在主動監聽9300以及它被防火牆允許(在'firewall'下的端口旁邊顯示'允許,不受限制')。所以剩下的最後一件事是檢查路由器,但在路由器的防火牆設置中沒有列表或任何看起來阻塞端口的東西(這很奇怪)。我也嘗試將端口更改爲80和443,並且在兩種情況下都不起作用(當然,使用Web服務)。你能提供進一步的建議嗎?謝謝! –

2

它看起來像一個防火牆/政策問題給我。

TCP 80可以允許的,因爲IIS安裝將打開它,這將解釋爲什麼正常的網頁瀏覽工作。但是您正試圖連接到TCP 9300,這是默認情況下不太可能的。

試試這個:How to Open a Port in the Windows 7 Firewall,並允許該端口。

+0

我添加了一個新的規則,仍然不起作用:< –

+0

@vtortola是否有可能使用主機名而不是IP與您的websocket庫 –

+0

組件綁定到IP端點,您需要IP地址和端口。您可以綁定到機器中的「所有」IP地址,並通過選中「主機」標頭來驗證握手期間的域名。 – vtortola

3

我敢肯定這是由於您的WebSocket服務器的配置。它必須監聽本地主機(127.0.0.1)以接受傳入的連接,在這種情況下,它不會回答那些針對192.168.1.3的連接。

由於您沒有提及您使用的是哪個服務器,我不能具體說明,但通常有兩種方法來實例化偵聽套接字,將其綁定到特定的IP地址或綁定任何地址系統具有的地址。如果您打算回答來自局域網內任何計算機的服務器連接,則需要配置後者。

+0

使用'127.0.0.1'和'192.168.1.3'時,服務器的行爲應該不同。嘗試綁定()到已經使用的地址將導致一個特定的錯誤,並且不允許服務繼續加載。通過它的聲音服務正在加載,但綁定到192.168.1.3:9300時沒有響應。這幾乎肯定會成爲防火牆問題。如果服務器不是無法綁定到192.168.1.3:9300,那麼應該假定它正在監聽,但是沒有到達。 – JSON

+0

我也經歷過同樣的情況,如果'127.0.0.1:9300'和'192.168.1.3:9300'都可以聽,並且你只是綁定到前者,你將不能夠接收來自後者的連接(大新)。詞幹沒有提及它是否成功地設法綁定到'192.168.1。3:9300'(只是本地主機),這就是爲什麼我認爲它不是! – Mehran

+0

當然,如果你綁定到'127.0.0.1'端口,它不會被綁定到'192.168.1.3'。我們並不反對這一點。然而,OP特別聲明她嘗試了'Server = new FancyWebSocket('ws://192.168.1.3:9300');'這意味着她試圖隱式綁定到192.168.1.3:9300。那時她不再在'localhost'上列出。她還表示'沒有電腦可以連接'。而不是'它收集並說我不能綁定到192.168.1.3'。當然,她不會試圖連接其他計算機的服務,如果它給出了任何跡象表明不啓動 – JSON

1

一般情況下,請勿嘗試從自己的計算機上訪問本地網絡IP地址。這裏有很多令人困惑的事情發生在套接字層,我會盡量不要深入研究。操作系統開始做這項工作。有時。我希望你不能達到192.168.1.3(我假設的服務器)。當你這樣做時,本地端點地址之間會有翻譯,這會使所有事情變得複雜。

網絡交換機通常不會將幀從它剛收到的端口發送回來,所以當您在cmd提示符中ping本地IP時看到的是OS所採用的環回快捷方式。

不能從另一臺機器到達它會導致我懷疑服務器上的套接字沒有正確綁定。仔細檢查你是否明確地聲明瞭服務器上的套接字(地址和端口),並確定你的監聽器是該套接字的。還要確保您綁定的地址適用於正確的網絡適配器。我始終用筆記本電腦或具有多個連接適配器的機器看到這一點。

不幸的是,我不能更加關注我的反應,因爲我不熟悉FancyWebSocket是什麼或者它是如何構建的。

+0

感謝您的建議。我檢查了您的建議,但仍無法從另一臺計算機連接。 FancyWebSocket只是一個幫助處理客戶端連接和事件的對象,沒什麼特別,只是一個40行的腳本,我可以在這個問題中發表,如果它有什麼不同。 –

1

我可以幫助你,如果它的Linux系統。

如果本地網絡上沒有名稱服務器,仍可以在通常爲本地網絡站保留的文件中建立一個映射IP地址和機器主機名的小表。

即使在網絡中斷或DNS服務器無法訪問的情況下,該文件仍然可用,但只有在網絡上的所有計算機上重複時纔有用。信函中最輕微的變更將要求文件隨時更新。這就是爲什麼/ etc/hosts通常只包含最重要的條目。

這個文件對於沒有連接到互聯網的小型網絡來說足夠了,但是對於5臺或更多的機器,建議安裝一個合適的DNS服務器。

嘗試添加所有'ip:port'以及主機名並將模板複製到所有系統的文件/ etc/hosts中。

希望它能解決問題!

相關問題