2014-01-28 2753 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中。

希望它能解决问题!