说明

支持Ssl的WebSocket客户端。

可配置项

继承HttpClient。

支持插件接口

支持ITcpPlugin、IWebSocketPlugin

创建WS客户端

  1. WebSocketClient myWSClient = new WebSocketClient();
  2. //myWSClient.Received += this.MyWSClient_Received;
  3. //myWSClient.Handshaked += this.MyWSClient_Handshaked;
  4. myWSClient.Setup(new TouchSocketConfig()
  5. .SetRemoteIPHost(this.textBox3.Text)
  6. .ConfigureContainer(a =>
  7. {
  8. a.SetSingletonLogger(new LoggerGroup(new EasyLogger(this.ShowMsg), new FileLogger()));
  9. }));
  10. myWSClient.Connect();
  11. myWSClient.Logger.Message("连接成功");

创建WSs客户端

当需要连接到由证书机构颁发的网址(例如:小程序物联网等)时,仅需要设置url即可。

  1. wss://127.0.0.1:7789/ws

当连接自定义证书的Ssl:wss://127.0.0.1:7789/ws

  1. WebSocketClient myWSClient = new WebSocketClient();
  2. myWSClient.Setup(new TouchSocketConfig()
  3. .SetRemoteIPHost(new IPHost("wss://127.0.0.1:7789/ws"))
  4. .SetClientSslOption(
  5. new ClientSslOption()
  6. {
  7. ClientCertificates = new X509CertificateCollection() { new X509Certificate2("RRQMSocket.pfx", "RRQMSocket") },
  8. SslProtocols = SslProtocols.Tls12,
  9. TargetHost = "127.0.0.1",
  10. CertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; }
  11. }))
  12. .Connect();
  13. Console.WriteLine("连接成功");
  14. while (true)
  15. {
  16. myWSClient.SendWithWS(Console.ReadLine());
  17. }

注意:当使用域名连接时,TargetHost为域名,例如连接到IPHost(“ws://baidu.com”)时,TargetHost应当填写:baidu.com

发送数据

将client对象转为HttpClient,即可使用扩展方法,进行发送。

作为一条消息发送
image.png

将一个数据分包发送
例如:发送的数据为{0,1,2,3,4,5,6,7,8,9},当设置packageSize为5时,会先发送{0,1,2,3,4}作为头包,然后发送{5,6,7,8,9}的后继包。
image.png

接收数据

订阅Received事件实现,或使用插件实现。

  1. client.Received += (c, e) =>
  2. {
  3. switch (e.Opcode)
  4. {
  5. case WSDataType.Cont:
  6. break;
  7. case WSDataType.Text:
  8. break;
  9. case WSDataType.Binary:
  10. break;
  11. case WSDataType.Close:
  12. break;
  13. case WSDataType.Ping:
  14. break;
  15. case WSDataType.Pong:
  16. break;
  17. default:
  18. break;
  19. }
  20. };

附加插件实现
该操作和服务器一致。