C#实现WebSocket(基于Fleck-服务端和WebSocketSharp-客户端)

C#实现WebSocket(基于Fleck-服务端和WebSocketSharp-客户端)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

官网:https://github.com/sta/websocket-sharp

客户端

 private void btn_Connect_Click_1(object sender, EventArgs e)
 {
     Console.WriteLine("Websocket Demo");
     WebSocket web = new WebSocket("ws://127.0.0.1:9999");
     web.OnMessage += Web_OnMessage;
     web.Connect();
     web.Send("你好!Hello!");
     web.Close();

 }

 private static void Web_OnMessage(object sender, MessageEventArgs e)
 {
   Console.WriteLine("Received a message of " + e.Data);
 }

服务端

using Fleck;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WebSocket111
{

    public class WebSocket
    {
        private List<IWebSocketConnection> allSockets = new List<IWebSocketConnection>();
        public void WebStart()
        {
            FleckLog.Level = LogLevel.Debug;
            allSockets = new List<IWebSocketConnection>();
            WebSocketServer server = new WebSocketServer("ws://127.0.0.1:6161/");
            server.Start(socket =>
            {
                socket.OnOpen = () => { allSockets.Add(socket); };
                socket.OnClose = () => { allSockets.Remove(socket); };
                socket.OnMessage = message => {
                    try
                    {
                        Console.WriteLine("接收:" + message);
                    }
                    catch (Exception e)
                    {
                        // 立即反馈异常信息
                        allSockets.ToList().ForEach(s => s.Send("数据错误:" + e.Message));
                    }
                };
            });
        }

        /// <summary>
        /// 按字节发送
        /// </summary>
        /// <param name="vlue"></param>
        public void Send(byte[] vlue)
        {
            foreach (var socket in allSockets.ToList())
            {
                socket.Send(vlue);
            }
        }

        /// <summary>
        /// 按字符串发送
        /// </summary>
        /// <param name="vlue"></param>
        public void Send(string vlue)
        {
            foreach (var socket in allSockets.ToList())
            {
                socket.Send(vlue);
            }
        }
    }
    public partial class Form1 : Form
    {
        public static WebSocket web = new WebSocket();

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 启动websocket
            web.WebStart();
            web.Send("XXXXX");

            
        }
    }
}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Linux C++中实现WebSocket客户端服务端,需要使用第三方库来处理WebSocket协议的数据帧的解析和封装。以下是一些常用的WebSocket库: - libwebsockets:这是一个轻量级、高性能的C库,支持WebSocket客户端服务端,以及HTTP客户端服务端。它还支持SSL和TLS加密协议。 - WebSocket++:这是一个C++的WebSocket库,支持WebSocket客户端服务端,以及TLS加密协议。它还提供了一些高级功能,如消息压缩和自定义协议扩展。 - Boost.Beast:这是Boost库中一个HTTP和WebSocket库,支持WebSocket客户端服务端,以及SSL加密协议。它提供了一个简单的API来处理WebSocket协议的数据帧。 下面是一个简单的示例代码,演示如何使用libwebsockets库实现一个WebSocket客户端服务端: ```c++ // WebSocket客户端 #include <libwebsockets.h> int main() { struct lws_context_creation_info info; struct lws_client_connect_info connect_info; struct lws *wsi = NULL; const char *address = "ws://localhost:8080"; memset(&info, 0, sizeof(info)); info.port = CONTEXT_PORT_NO_LISTEN; info.protocols = NULL; info.gid = -1; info.uid = -1; struct lws_context *context = lws_create_context(&info); if (context == NULL) { return -1; } memset(&connect_info, 0, sizeof(connect_info)); connect_info.context = context; connect_info.address = address; connect_info.port = 0; connect_info.path = "/"; connect_info.host = lws_canonical_hostname(context); connect_info.origin = connect_info.host; connect_info.protocol = "chat"; connect_info.ssl_connection = 0; wsi = lws_client_connect_via_info(&connect_info); if (wsi == NULL) { lws_context_destroy(context); return -1; } while (true) { lws_service(context, 50); } lws_context_destroy(context); return 0; } // WebSocket服务端 #include <libwebsockets.h> static int callback_echo(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED: { printf("Connection established\n"); break; } case LWS_CALLBACK_RECEIVE: { printf("Received data: %s\n", (char *)in); lws_write(wsi, (unsigned char *)in, len, LWS_WRITE_TEXT); break; } default: break; } return 0; } int main() { struct lws_context_creation_info info; struct lws_protocols protocol; struct lws_context *context = NULL; memset(&info, 0, sizeof(info)); info.port = 8080; info.protocols = &protocol; info.gid = -1; info.uid = -1; memset(&protocol, 0, sizeof(protocol)); protocol.name = "chat"; protocol.callback = callback_echo; protocol.per_session_data_size = 0; protocol.rx_buffer_size = 0; context = lws_create_context(&info); if (context == NULL) { return -1; } while (true) { lws_service(context, 50); } lws_context_destroy(context); return 0; } ``` 这个示例代码使用libwebsockets库分别实现了一个WebSocket客户端服务端。在客户端中,它创建了一个WebSocket连接,并发送和接收数据。在服务端中,它监听端口8080,并接收客户端的连接请求,收到数据后将其原样发送回去。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值