前言
WebSocket使用案例
使用包:WebSocketSharp-netstandard。可以通过NuGet管理程序添加哦。
一、Websocket是什么?
WebSocket是先通过Http进行一次握手,然后通过(全双工)TCP进行传输数据。话不多直接代码
二、使用步骤
1.服务端
两个类,一个WSocketl类,另一个WSocketHandle处理类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebSocketSharp;
using WebSocketSharp.Server;
namespace WebSocketTest
{
/// <summary>
/// 服务端
/// </summary>
public class WSocket
{
//WebSocket对象
public WebSocketServer _socketServer = null;
List<WebSocketServiceHost> webSocketServiceHosts;
public delegate bool SendDatas(string sData);
public static event SendDatas SendDataEvent;
public WSocket()
{
//实例化
_socketServer = new WebSocketServer("ws://127.0.0.1:9988");
//添加WebSocket的服务处理类
_socketServer.AddWebSocketService<WSocketHandle>("/wsRobot");
WebSocketServiceManager wSocketServiceManager = _socketServer.WebSocketServices;
webSocketServiceHosts = wSocketServiceManager.Hosts.ToList();
}
/// <summary>
/// 发送信息
/// </summary>
/// <param name="Data"></param>
public void SendData(string Data)
{
//第一种触发方式发送
// SendDataEvent?.Invoke(Data);
//第二种获取到session会话对象发送
var session = webSocketServiceHosts[0].Sessions;//获取到session会话对象
var sessionIds = session.ActiveIDs;//获取会话的IDs
foreach (var sessionId in sessionIds)
{
//发送
session.SendToAsync(Data, sessionId, new Action<bool>(t =>
{
if (!t)
{
Console.WriteLine("发送失败");
}
}));
}
}
/// <summary>
/// 启动
/// </summary>
public void Start()
{
_socketServer.Start();
}
/// <summary>
/// 停止
/// </summary>
public void Stop()
{
_socketServer.Stop();
}
}
///
/// <summary>
/// Websoket的信息处理类
/// </summary>
public class WSocketHandle:WebSocketBehavior
{
public WSocketHandle()
{
WSocket.SendDataEvent += SendDataEvent;
}
/// <summary>
/// 关闭触发
/// </summary>
/// <param name="e"></param>
protected override void OnClose(CloseEventArgs e)
{
Console.WriteLine("连接断开:目前连接人数" + Sessions.Count);
}
/// <summary>
/// 连接触发
/// </summary>
protected override void OnOpen()
{
Console.WriteLine("连接成功:目前连接人数" + Sessions.Count);
}
/// <summary>
///
/// </summary>
/// <param name="e"></param>
protected override void OnError(ErrorEventArgs e)
{
Console.WriteLine("错误信息:" + e.Message);
}
/// <summary>
/// 接收信息触发
/// </summary>
/// <param name="e"></param>
protected override void OnMessage(MessageEventArgs e)
{
string data = e.Data;
Console.WriteLine(data);
}
/// <summary>
/// 发送信息事件
/// </summary>
/// <param name="sData"></param>
/// <returns></returns>
public bool SendDataEvent(string sData)
{
if(State== WebSocketState.Open)
{
if (Sessions.Count > 0)
{
Send(sData);
return true;
}
}
return false;
}
}
}
2.客户端
写了个简单的Html连接
<html> <head lang="en"> <meta charset="UTF-8"> <title></title> </head> <body> 客户端:</br> <textarea id="textarea1" style="height: 500px; width: 300px;"></textarea> <input type="button" id="send" onclick="sendData()" value="快快快发送"> <input type="text" id="message1"> <script type="text/javascript"> //检查浏览器是否支持WebSocket if (!window.WebSocket) { console.log('您的浏览器不支持WebSocket'); } var el = document.getElementById("textarea1"); var wsClient = new WebSocket('ws://127.0.0.1:9988/wsRobot'); //发送 function sendData() { var Text1 = document.getElementById("message1"); wsClient.send( Text1 .value); } //连接 wsClient.open = function (e) { el.value += "连接到了!\r\n"; } wsClient.onclose = function (e) { el.value += "突然你就走了,断开了!\r\n"; } //接收 wsClient.onmessage = function (e) { console.log(wsClient); el.value += "接收的信息:" + e.data + "\r\n"; } wsClient.onerror = function (e) { el.value += "连接失败!结果:" + e.data + "\r\n"; }
</script> </body> </html>
总结
学习与快乐并进,只愿当下的我还是还是个阳光开朗的有那么点帅气的小伙子哈哈哈