Dart将客户端Socket升级到WebSocket

时间:2018-12-11 10:08:21

标签: websocket dart flutter certificate

由于Dart中的WebSocket不允许直接设置SecurityContext(我需要进行证书检查),因此我想与SecureSocket实例建立连接,然后使用WebSocket.fromUpgradedSocket构造函数从中创建一个WebSocket实例。

这个想法最初是here的建议。

但是,我无法让它与以下代码一起使用(当我想要wss时,甚至ws都无法工作):

sock = await Socket.connect('ws://echo.websocket.org', 80);
socket = WebSocket.fromUpgradedSocket(sock, serverSide: false);
socket.listen(myListener);
// Send some dummy data
var list = utf8.encode("hello");
var data = list is Uint8List ? list : Uint8List.fromList(list);
socket.add(data);

这里的袜子是Socket类型,套接字是WebSocket类型,而myListener是一个函数,当收到消息时,该函数会打印一些调试语句。我没有收到错误,但是也没有进入侦听器-当我用前一行替换前两行时,我会这样做:

socket = await WebSocket.connect('ws://echo.websocket.org');    

我认为问题是我的套接字'sock'没有升级,而上述构造函数的WebSocket source code明确指出:'从已经升级的套接字创建WebSocket。'。

所以我的问题是,现有的Dart类是否可以将客户端(Secure-)Socket升级到升级后的(Secure-)Socket? (然后将其转换为WebSocket实例)

1 个答案:

答案 0 :(得分:2)

使用twd(i) = m1(i) / c1(i) 建立初始的http(s)连接,然后HttpClient建立套接字。这是http的示例。您应该能够适应https。请注意,初始连接是如何通过http建立的,但是通过添加适当的请求标头进行升级。 (您需要根据Websocket服务器所需的安全方案调整标头。)

detach