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){// 启动websocketweb.WebStart();web.Send("XXXXX");}}
}