第一步:在vs的NuGet里导入Fleck包,选择自己想要安装的项目安装
第二步
创建SocketService通讯控制类
namespace MeasureRobot.Service.Utils.FleckService
{
/// <summary>
/// C# 实现WebSocket控制核心类
/// </summary>
public class SocketService
{
public void Start()
{
FleckLog.Level = LogLevel.Debug;
var allSockets = new List<IWebSocketConnection>();
var server = new WebSocketServer("ws://192.168.0.107:8088");
server.Start(socket =>
{
socket.OnOpen = () =>
{
Debug.WriteLine(DateTime.Now + " hello2,Open");
Console.WriteLine("Open!");
allSockets.Add(socket);
};
socket.OnClose = () =>
{
Debug.WriteLine(DateTime.Now + " hello2,Close");
Console.WriteLine("Close!");
allSockets.Remove(socket);
};
socket.OnMessage = message =>
{
Debug.WriteLine(DateTime.Now + " hello2,Close,Echo");
Console.WriteLine(message);
allSockets.ToList().ForEach(s => s.Send("Echo: " + message));
};
});
var input = Console.ReadLine();
while (input != "exit")
{
foreach (var socket in allSockets.ToList())
{
socket.Send(input);
}
input = Console.ReadLine();
}
}
}
}
由于最后有个无限循环,所以不能使用接口去开启,这样接口没有返回数据
第三步
检测webSocket是否开启成功
在浏览器的控制台中输入
ws = new WebSocket("ws://192.168.0.107:8088");
ws.onopen = function() {
ws.send('websocekt测试');
};
这样就是成功了
bug记录:
第一个bug:
首先出现:在其上下文中,该请求的地址无效。
这样的错误提醒,是因为
在var server = new WebSocketServer("ws://192.168.1.107:54945");
这行代码中,192.168.1.107:54945要改成自己电脑的ip
这样就解决问题了
第二个bug:
错误信息:以一种访问权限不允许的方式做了一个访问套接字的尝试。
这个是因为端口不能用被占用的端口
也不能使用项目运行的端口,
否则就会在出现这个错误
三 注意事项
1,如果时webapi项目
只需要在Global.asax.cs项目启动文件中调用,就会在项目启动时运行webSocket
2其他情况,
在使用前调用一下start方法,开启webSocket即可