一.服务端
新建一个.net项目,如websocket.server
安装包
install-package websocketsharp -pre
定义websockethelper
using caseauto.helper.websocket; using system.collections.generic; using websocketsharp.server; namespace caseauto.helper { public class websockethelper { static websocketserver wssv = new websocketserver("ws://127.0.0.1"); private static dictionary<string,caseinfobehavior> clients = new dictionary<string,caseinfobehavior>(); public static void init() { wssv.addwebsocketservice<caseinfobehavior>("/caseinfo",()=>new caseinfobehavior(clients)); wssv.start(); } public static void end() { wssv.stop(); } } }
创建caseinfobehavior
using newtonsoft.json; using system; using system.collections.generic; using websocketsharp; using websocketsharp.server; namespace caseauto.helper.websocket { public class caseinfobehavior : websocketbehavior { private string _username; private dictionary<string, caseinfobehavior> _clients = new dictionary<string, caseinfobehavior>(); public caseinfobehavior(dictionary<string,caseinfobehavior> clients) { _clients = clients; } protected override void onmessage(messageeventargs e) { var data=jsonconvert.deserializeobject<websocketmsgmodel>(e.data); switch (data.msgtype){ case msgtype.normal: var msg = $"this msg from serve,i recive msg:{data.content}"; send(msg); break; case msgtype.group: sendmessagetoall(data.content); //sessions.broadcast(data.content); break; case msgtype.to_reciver: sendmessagetoreciver(data.reciver, data.content); break; default: break; } } protected override void onopen() { _username = context.querystring["name"]; if (string.isnullorempty(_username)) { _username = this.id; return; } _clients.add(_username, this); console.writeline("client connected: " + _username); } protected override void onclose(closeeventargs e) { _clients.remove(_username); console.writeline("client connected: " + _username); } protected void sendmessagetoreciver(string reciver,string message) { foreach (var client in _clients) { if (client.key == reciver) { client.value.send(message); break; } } } protected void sendmessagetoall(string message) { foreach (var client in _clients) { client.value.send(message); } } } }
创建websocketmsgmodel
namespace caseauto.helper.websocket { public class websocketmsgmodel { public msgtype msgtype { get; set; } public string content{ get; set; } public string sender { get; set; } public string reciver { get; set; } } public enum msgtype { normal=0, group=1, to_reciver = 2, } }
使用
websockethelper.init();
二.客户端
新建一个.net项目,如websocket.client
安装包
install-package websocketsharp -pre
使用
static void main(string[] args) { using (var ws = new websocket("ws://127.0.0.1/caseinfo?name=c1")) { string? response = string.empty; ws.onmessage += (sender, e) => { response = e.data; console.writeline("response: " + response); }; ws.connect(); while (true) { string? request = console.readline(); ws.send(request); console.readkey(true); } } }
三.调试
- 启动分别启动服务端、客户端
- 客户端控制台输入【常规通讯测试】
{"msgtype":0,"content":"hello"}
输入后,回车,服务端返回
启动apipost,新建websocket,输入以下内容【群发】
ws://127.0.0.1/caseinfo?name=c2 {"msgtype":1,"content":"hello456","reciver":"c1"}
点击连接:
点击发送:
4. 指定人发送
将apipost中发送的消息变为下面内容,重新观察apipost和自定义客户端
{"msgtype":2,"content":"hello c1","reciver":"c1"}
以上就是c#实现websocket双向通信的示例代码的详细内容,更多关于c# websocket双向通信的资料请关注代码网其它相关文章!
发表评论