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");
}
}
}