我和these examples玩了一会儿。我使用平板电脑从服务器获得适当的响应:
HttpServer.bind(InternetAddress.ANY_IP_V4, 4040)
然后我想尝试安全套接字示例。对于localhost,它正在工作。
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的第一个参数失败?我不明白错误信息。
答案 0 :(得分:1)
编辑:查看评论,这是旧版Dart VM中的错误/不一致!
这看起来像个错误。根据{{3}},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地址。
我已经了解了这些文件的来源;但无法弄清楚这是什么错误;乍一看代码看起来很好:(