我稍微摆弄了一下这些例子。我使用
从平板电脑的服务器获得正确的响应HttpServer.bind(InternetAddress.ANY_IP_V4, 4040)
然后我想尝试安全套接字的例子。对于本地主机,它正在工作一个预期的。
HttpServer.bindSecure('localhost', 4047...
但是它不会响应来自其他计算机的请求。所以我试着这样做:
HttpServer.bindSecure(InternetAddress.ANY_IP_V4, 4047,
并得到编译错误:
Breaking on exception: object of type TypeError
Unhandled exception:
type '_InternetAddress' is not a subtype of type 'String' of 'address'.
#0 RawSecureServerSocket.bind (secure_server_socket.dart:182)
#1 SecureServerSocket.bind (secure_server_socket.dart:70)
#2 _HttpServer.bindSecure (http_impl.dart:2025)
#3 HttpServer.bindSecure (http.dart:179)
#4 main (file:///D:/Documents/dart/dart-tutorials-samples-master/httpserver/bin/hello_world_server_secure.dart:16:24)
#5 _startIsolate.isolateStartHandler (dart:isolate-patch/isolate_patch.dart:216)
#6 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:115)
我试着打印"InternetAddress"。ANY_IP_V4',得到'0.0.0.0'。所以我试了:
HttpServer.bindSecure('0.0.0.0', 4047,
它成功了。
为什么InternetAddress。ANY_IP_V4'作为bindSecure失败的第一个参数?我不明白错误信息
编辑:查看注释,这是旧版本Dart VM中的错误/不一致!
这看起来像一个bug。根据文档bindSecure应该采取String
或InternetAddress
, InternetAddress.ANY_IP_V4
甚至给出了一个样本!
地址可以是
String
或InternetAddress
。如果地址是String
, bind将执行查找并使用列表。在环回适配器上监听,这将只允许来自本地主机的传入连接,使用该值[InternetAddress.LOOPBACK_IP_V4
]或[InternetAddress.LOOPBACK_IP_V6
]。要允许来自网络的传入连接,请使用[InternetAddress.ANY_IP_V4
]或[InternetAddress.ANY_IP_V6
]绑定所有接口或指定接口的IP地址。
我已经浏览了这些文件的源代码;但不知道是什么虫子;代码第一眼看起来不错:(