在 GAE 开发模式下无法连接到 Windows 下的 0.0.0.0



我们有一个java应用程序,通过GAE的图像服务提供图像。在Linux机器下用eclipse测试它非常完美。但是,在Windows机器(Vista)中测试完全相同的代码时,带来图像时会失败。图像url如下:

http://0.0.0.0:8888/_ah/img/encoded_gs_key:cHJvZmlsZXBpY3R1cmVzLzVVTkhjc1IybjktQTlrckdiZWZfTkE

我认为这与0.0.0.0地址有关,因为Linux将其解析为127.0.0.1,但Windows甚至无法ping到它。有什么方法可以使0.0.0.0在Windows下工作吗?有什么方法可以更改GAE开发模式用于解析图像的0.0.0.0地址吗?

我认为在这种情况下,Linux做得不对——我认为它试图通过将0.0.0.0路由到127.0.0.1来帮助工作,但实际上0.0.0.0是一个不可路由的地址,Windows正确地没有路由它。

请参见此处:http://en.wikipedia.org/wiki/0.0.0.0

简短回答:我同意八位大师的观点。它在Linux上运行可能只是运气。(尽管我确信Linux网络的家伙会声称Windows完全错了,但我跑题了)。

我曾经遇到过将一些代码从Linux移植到Windows的类似问题。我的主线程会向另一个线程上的recvfrom调用上阻止的套接字的侦听地址发送一个空UDP数据包。在阻塞recvfrom()调用中醒来的线程会注意到退出条件并立即返回。

Linux上的代码工作正常。主线程会调用getsockname来获取套接字的本地侦听地址并向其发送数据包。当套接字绑定到INADDR_ANY(意思是"所有适配器",但编码为0.0.0.0)时,它就起作用了。发送到0.0.0.0会到达侦听套接字。

但这个代码路径在通往Windows的端口上被炸了。修复方法是只检测侦听地址何时为0.0.0.0,并将其切换为发送到127.0.0.1(localhost)。一切都很好。

因此,如果修复生成URL的代码不起作用,我想了两个解决方案:

1.将路由添加到路由表(不起作用)

现在我开始思考是否可以在路线表中添加一条路线。从命令行:

route add 0.0.0.0 MASK 255.255.255.255 10.120.30.194

这实际上成功地将一条路由添加到了表中。。。

但遗憾的是,它似乎并没有像我想象的那样奏效。。。。

2.运行代理服务器

我认为这可能适用于本地调试。你可以和你的代码一起运行Fiddler。在Fiddler中实现一个将0.0.0.0转换为127.0.0.1的脚本/规则。

你没有说下载的是什么。如果是浏览器,那么像GreaseMonkey这样的东西可能是你的朋友。

最新更新