一.服务端
新建一个.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双向通信的资料请关注代码网其它相关文章!
发表评论