在本地网络中使用websocket-connection时出现问题。
情境:
对于我的笔记本电脑(Win7)我写了一个服务,打开一个websocket-server到端口2014.因为默认情况下没有为windows 7启用websockets我使用的是超级插件库(http://www.supersocket.net/) 。
对于客户端我已经编写了一个带有sencha touch和Phonegap的Android应用程序。为版本低于4.4的Android设备启用websocket支持我已经集成了phonegap websocket-pugin。
原因是在Android设备和笔记本电脑之间打开websocket连接,以通过Android应用程序控制笔记本电脑。两个设备都是同一本地网络的成员。
问题:
安装两个应用程序(Windows服务和Android应用程序)后,我试图将我的Android设备与笔记本电脑的服务连接。第一步是在客户端上打开连接:
var connection = new WebSocket('ws://192.168.178.21:2014');
但是在我的Windows服务的事件日志中,没有成功连接记录。
之后我打开笔记本电脑的浏览器并测试相同的代码 - 成功。客户端和服务器可以相互通信。
所以我在Android设备上测试了websocket-support:将websocket-url更改为
var connection = new WebSocket('ws://echo.websocket.org');
并且可以连接到服务器 - > Android websockets还可以。
第三步是禁用防火墙并检查与Wireshark的连接:
截图:http://www.directupload.net/file/d/3710/y9t79npy_png.htm
192.168.178.21 - >笔记本电脑IP
192.168.178.23 - > Android设备IP
所以似乎数据包到达我的笔记本电脑而不是服务。其他尝试使用安全的wss://协议 - 没有胜利。
再也没有任何想法了。很乐意得到一些帮助:)
答案 0 :(得分:1)
一段时间后,我找到了解决方案:
必须将防火墙规则添加到公共防火墙选项中。
感谢您的帮助:)
答案 1 :(得分:1)
所以似乎数据包到达我的笔记本电脑而不是服务。
可能是服务器绑定到特定的IP地址或主机名吗?通常,服务器将隐式绑定到所有接口,例如0.0.0.0,但有时它们绑定到一个特定接口。如果发生这种情况,那么您需要连接到同一个接口。
您说您的客户端正在连接到ws://192.168.178.21:2014,但可能是服务器绑定到127.0.0.1或localhost或您的主机名,因此没有看到请求?这可以解释为什么笔记本电脑收到了请求,但没有收到您的服务。
然后再说一遍,你说你是从本地浏览器尝试过的,它确实有效。您使用的是同一个IP地址,还是使用了127.0.0.1或localhost?假设您使用了相同的IP地址192.168.178.21,那么这表明它不是我描述的绑定问题。
对不起,这就是我现在所能想到的。