由于Dart中的WebSocket不允许直接设置SecurityContext(我需要进行证书检查),因此我想使用SecureSocket实例建立连接,然后使用WebSocket.fromUpgradedSocket构造函数从中创建一个WebSocket实例。
这个想法最初是在这里提出的。
但是,我无法使用以下代码使其正常工作(尽管我想要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);
这里的sock是Socket类型,socket是WebSocket类型,myListener是一个函数,当接收到消息时会打印一些调试语句。我没有收到错误,但也没有进入监听器 - 当我用以下代码替换前两行时,我可以进入监听器:
socket = await WebSocket.connect('ws://echo.websocket.org');
我猜问题在于我的Socket 'sock'没有升级,而 WebSocket源代码中提到的构造函数明确说明:'从已升级的套接字创建WebSocket。'。
所以我的问题是,使用现有的Dart类是否可以将客户端(安全)Socket升级为升级的(安全)Socket?(这将允许将其转换为WebSocket实例)