我已经设置了一个以学习为目的的websockets聊天。一切正常,但我无法解决这个问题。
当我提供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 :(得分:6)
我解决了这个问题。由于它是两个答案的组合,我认为唯一公平的事情是添加另一个答案和解释。
正如@Mehran建议的那样,我已将服务器地址设置为127.0.0.1
而不是网络地址。将其更改为192.186.1.3
后,我能够从服务器本身进行连接,但其他计算机无法连接。然后我按照@ vtortola的答案中提供的指南中的步骤,将新的入站规则添加到服务器的防火墙中,以便允许使用该端口。
所以最后这一切现在都有效,非常感谢你帮助我。 +代表大家!
答案 1 :(得分:3)
我很确定这是由于您的WebSocket服务器的配置。它必须监听localhost(127.0.0.1
)才能接受传入的连接,在这种情况下,它不会回答那些瞄准192.168.1.3
的人。
由于您没有提到您正在使用的服务器,因此我无法具体说明,但通常有两种方法可以实例化侦听套接字,将其绑定到特定的IP地址或*
以绑定任何地址系统具有。如果您打算应答来自LAN中任何计算机的服务器连接,则需要配置更高版本。
答案 2 :(得分:2)
对我来说,这似乎是一个防火墙/政策问题。
您的TCP 80
可以被允许,因为IIS安装会打开它,这将解释为什么正常的网页浏览有效。但是您正在尝试连接到TCP 9300
,这在默认情况下是不太可能的。
试一试:How to Open a Port in the Windows 7 Firewall,并允许该端口。
答案 3 :(得分:1)
在解决此问题时,您可以放心地采取以下措施:
如果该服务能够在同一台机器上运行127.0.0.1,您可以认为问题不在代码或PHP配置中
如果在服务器尝试绑定到192.168.1.3:9003
时没有收到错误,您可以放心地假设该服务正在运行。尝试打开资源监视器以查看它是否实际正在侦听此端口以进行确认。为此,请转到“开始”菜单'在Windows中键入'资源监视器'在'搜索程序和文件'框。打开资源监视器后,单击“概述”'选项卡并找到服务器进程的名称(通常是' php'如果您使用CLI)。选择您的流程后,请切换到“'网络”。选项卡,您将能够看到它是否正在侦听“TCP连接”中的任何端口。面板。这将显示列出的地址和端口,以及连接到该服务的任何客户端的远程地址和端口。
如果您知道服务器正在运行,并且您知道它正在主动侦听预期的地址和端口,则很可能是Windows或路由器中的防火墙问题。请注意,即使192.168.1.3
是分配给您的接口的IP,但这不是本地IP,所有与192.168.1.3
之间的通信仍将通过Windows防火墙,包括在同一台计算机上发送。如果您已经在这一点上,我强烈建议您首先检查您的Windows防火墙。如果它不是Windows防火墙,请检查路由器是否阻塞端口,还要检查端口转发和其他设置,以确保路由器不会干扰。我们可以在这里帮您解决路由器问题,但请准备好路由器的手册。
HTTP是一个公共服务端口,因此很可能路由器没有阻塞端口,如果您使用IIS,Windows可能会自动打开它。 9300不是一个通用端口,因此在任何情况下都不可能默认打开,除非您的默认设置为"全部在",这实际上意味着您不使用防火墙。
您可能尝试的另一件事(如果可能的话)是关闭现有的HTTP服务并使用您的Websocket服务绑定到端口80,或者如果可能(并且在小心的时候)完全关闭Windows防火墙以查看它是否工作得足够长连接。
答案 4 :(得分:1)
通常,请勿尝试从您自己的计算机访问本地网络IP地址。在这里,套接字层发生了非常令人困惑的事情,我试图不去深入研究。操作系统不遗余力地完成这项工作。有时。我希望你不能达到192.168.1.3(我假设的服务器)。当你这样做时,在本地端点地址之间进行转换会使一切变得复杂。
网络交换机通常不会将帧从其刚接收到的端口发回,因此当您在cmd提示符中ping本地IP时,您所看到的是操作系统正在采取的环回快捷方式的
无法从其他计算机访问它会导致我怀疑套接字未在服务器上正确绑定。仔细检查您是否明确声明服务器上的套接字(地址和端口),以及绑定您的侦听器到该套接字。还要确保您绑定的地址是针对正确的网络适配器。我一直看到笔记本电脑或有多个连接适配器的机器。
不幸的是,由于我不熟悉FancyWebSocket或者它是如何构建的,所以我的回答不会更具针对性。
答案 5 :(得分:1)
如果它是一个Linux系统,我可以帮到你。
如果本地网络上没有名称服务器,仍然可以在 / etc / hosts 文件中建立映射IP地址和机器主机名的小表,通常为本地网络站保留
即使在网络中断期间或DNS服务器无法访问时,此文件也可用,但只有在网络上的所有计算机上重复时才真正有用。通信中最轻微的改动将要求文件在任何地方更新。这就是为什么/ etc / hosts通常只包含最重要的条目。
此文件足以用于未连接到Internet的小型网络,但如果有5台或更多计算机,建议安装正确的DNS服务器。
尝试添加所有'ip:port'和主机名,并将模板复制到所有系统的/ etc / hosts文件中。
希望它能解决问题!