C# WebSocket 客户端 使用 TouchSocket WebSocketClient

这篇具有很好参考价值的文章主要介绍了C# WebSocket 客户端 使用 TouchSocket WebSocketClient。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

由于涉及到连接某音的弹幕数据,所以需要WebSocket,百度了一圈,有C#原生的WebSocket,看了看,看不懂,无奈换一个,TouchSocket来到了我的面前,网上对于这个插件的评价较高,所以使用之。结果,一堆问题之。唉。抄袭这么难吗?

如果由TouchSocket开发服务端,并且用TouchSocket客户端链接,这样内部使用是没有问题的,B站上也有一大堆视频,问题是,如果我想连接到别人的地址怎么办,尤其是涉及到Cookie和Head参数设置时,问题就来了。

折腾了两天,各种百度都没什么有用的文章,这一点确实比Python差的太多了。所以直接干源码吧,毕竟开源的有这个优势。git clone下来以后运行一下试试吧,结果源码也不支持,难道要干源码,Debug调试了一下流程。终于找到了一些位置是有问题的。

WebSocketClient myWSClient = new WebSocketClient();

myWSClient.Setup(new TouchSocketConfig()
    .SetRemoteIPHost(new IPHost("wss://127.0.0.1:7789/ws"))
    .SetClientSslOption(
    new ClientSslOption()
    {
        ClientCertificates = new X509CertificateCollection() { new X509Certificate2("RRQMSocket.pfx", "RRQMSocket") },
        SslProtocols = SslProtocols.Tls12,
        TargetHost = "127.0.0.1",
        CertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; }
    }))
    .Connect();

Console.WriteLine("连接成功");

这是官方的代码,查了所有文档和代码,没有能设置Cookie和Header的地方。这些对于别人家的是需要验证的参数。

但是应该有相关设置的地方吧,仔细找找,找到了这里

public static HttpRequest GetWSRequest(string host, string url, string version, out string base64Key)
        {
            HttpRequest request = new HttpRequest
            {
                Method = "GET",
                Protocols = "HTTP",
                ProtocolVersion = "1.1"
            };
            request.SetUrl(url);
            request.SetHeader(HttpHeaders.Host, host);
            request.SetHeader(HttpHeaders.Pragma, "no-cache");
            request.SetHeader(HttpHeaders.UserAgent, "TouchSocket.Http.WebSockets");
            request.SetHeader(HttpHeaders.Origin, "RRQM");
            request.SetHeader(HttpHeaders.AcceptEncoding, "deflate, br");
            request.SetHeaderByKey("Connection", "upgrade");
            request.SetHeaderByKey("Upgrade", "websocket");
            request.SetHeaderByKey("Sec-WebSocket-Version", $"{version}");
            base64Key = CreateBase64Key();
            request.SetHeaderByKey("Sec-WebSocket-Key", base64Key);

            return request;
        }

看到这个代码,郁闷郁闷,Origin居然是RRQM 谁家会这么写,UserAgent也是乱写,AcceptEncoding不支持gzip。无语了。

重点

这里是可以设置Header和Cookie的,直接改写这里就可以了

比如需要传 Cookie 可以多写一行 request.SetHeader("Cookie", "你的Cookie值");

把不对的都改成自己需要的就可以了。这样是不是就完事了,感觉不是那么友好,如果支持SetHeader(KeyValue对数据)是不是更灵活

Dictionary<string, string> headers = new Dictionary<string, string>(); 
headers.Add("cookie", "");
headers.Add("user-agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.5359.95 Safari/537.36");
headers.Add("Origin", "https://lxxxxx.com");
headers.Add("AcceptEncoding", "gzip, deflate, br");

WebSocketClient myWSClient = new WebSocketClient();
myWSClient.Setup(new TouchSocketConfig()
	.SetHeaders(headers) //重点
    .SetRemoteIPHost(new IPHost("wss://127.0.0.1:7789/ws"))
    .SetClientSslOption(
    new ClientSslOption()
    {
        ClientCertificates = new X509CertificateCollection() { new X509Certificate2("RRQMSocket.pfx", "RRQMSocket") },
        SslProtocols = SslProtocols.Tls12,
        TargetHost = "127.0.0.1",
        CertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { return true; }
    }))
    .Connect();

Console.WriteLine("连接成功");

修改好的代码提供下载包,也可以找我要源码

https://download.csdn.net/download/hanlinhe111/87712840

联系我:QQ1580007242文章来源地址https://www.toymoban.com/news/detail-523842.html

到了这里,关于C# WebSocket 客户端 使用 TouchSocket WebSocketClient的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ChatGPT】如何使用Qt设计SocketIO类型的WebSocket协议客户端

    本文第一次发布 2023年03月24日09点28分 Authors ChatGPT / THDMI 最近写 Flask-SocketIO 服务端的时候,苦于不熟悉前端代码,想试着用 QT 来写客户端,但不清楚该怎么描述,以致于好像一直查的都是 RAW 类型的 WebSocket 协议处理,于是一直没找到 event 和 room 或者 namespace 处理方式。 简单

    2023年04月21日
    浏览(62)
  • Java 构建websocket客户端,构建wss客户端,使用wss连接,并发送数据到服务器端,接收服务器端消息

    Java 构建websocket客户端,构建wss客户端,使用wss连接,并发送数据到服务器端,接收服务器端消息 回调函数处理

    2024年02月13日
    浏览(61)
  • c#客户端Kafka的使用方法

    Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,现在是Apache软件基金会的顶级项目之一。Kafka能够处理大规模的实时数据流,支持高可靠性、高可扩展性、低延迟和高吞吐量。它主要用于构建实时数据管道和流式处理应用程序。 Kafka的核心概念包括:Producer(生产者)

    2024年02月12日
    浏览(63)
  • 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写的参考笔记

    2023/8/29 19:21:11 服务器端使用django websocket,客户端使用uniapp 请问服务端和客户端群组互发消息的代码怎么写 2023/8/29 19:22:25 在服务器端使用Django WebSocket和客户端使用Uniapp的情况下,以下是代码示例来实现服务器端和客户端之间的群组互发消息。 服务器端代码 (使用Django Chann

    2024年02月11日
    浏览(46)
  • AI对话交互场景使用WebSocket建立H5客户端和服务端的信息实时双向通信

    WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许 服务端主动向客户端推送数据 。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。 初次接触 WebSocket 的人,都会问同样的问题:我们已经有了 HT

    2024年02月03日
    浏览(53)
  • Winform中使用Websocket4Net实现Websocket客户端并定时存储接收数据到SQLite中

    SpringBoot+Vue整合WebSocket实现前后端消息推送: SpringBoot+Vue整合WebSocket实现前后端消息推送_websocket vue3.0 springboot 往客户端推送-CSDN博客 上面实现ws推送数据流程后,需要在windows上使用ws客户端定时记录收到的数据到文件中,这里 文件使用SQLite数据库进行存储。 Winform中操作Sql

    2024年02月22日
    浏览(48)
  • C#语言使用EasyModbus做客户端和西门子1511PLC通信

    之前一直使用开源库NModbus,它是一个非常优秀的Modbus通信类库,偶然机会下我发现了EasyModbus,发现EasyModbus的代码非常精炼、间接,一两行代码就可以创建一个Modbus TCP Client。 EasyModbus官网:http://easymodbustcp.net/en/ 在官网下载DLL文件,在项目中添加引用。 代码如下(示例):

    2023年04月11日
    浏览(36)
  • Java WebSocket客户端

    1.依赖 2.代码 1.依赖 2.代码 2.1 自定义 websocket handler 2.2 将websocket handler加入容器 2.3 定时器监控

    2024年02月16日
    浏览(43)
  • 客户端 WebSocket详细用法

    WebSocket是一种网络通信协议,很多高级功能都需要用到它。 有些人会想,既然我们已经有了HTTP协议了,为什么还要花时间学另一种协议呢?这个协议到底有什么魔力,值得我们花时间学它。 因为 HTTP 协议有一个缺陷:通信只能由客户端发起。只能是客户端向服务器发出请求

    2024年02月04日
    浏览(45)
  • SpringBoot WebSocket做客户端

    常见的都是springboot应用做服务,前端页面做客户端,进行websocket通信进行数据传输交互。但其实springboot服务也能做客户端去连接别的webSocket服务提供者。 刚好最近在项目中就使用到了,需求背景大概就是我们作为一个java段应用需要和一个C语言应用进行通信。在项目需求及

    2024年02月11日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包