用C#搭建WebSocket
程序员文章站
2022-06-05 18:45:59
WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。 WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接, ......
websocket 是 html5 开始提供的一种在单个 tcp 连接上进行全双工通讯的协议。
websocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 websocket api 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
在 websocket api 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。
今天在这里我会用c#搭建websocket服务端演示websocket的通信过程
一、websocket中的事件、属性和方法
属性:
socket.readystate 只读属性 readystate 表示连接状态,可以是以下值: 0 - 表示连接尚未建立。 1 - 表示连接已建立,可以进行通信。 2 - 表示连接正在进行关闭。 3 - 表示连接已经关闭或者连接不能打开。
socket.bufferedamount 只读属性 bufferedamount 已被 send() 放入正在队列中等待传输,但是还没有发出的 utf-8 文本字节数
事件:
事件 事件处理程序 描述 open socket.onopen 连接建立时触发 message socket.onmessage 客户端接收服务端数据时触发 error socket.onerror 通信发生错误时触发 close socket.onclose 连接关闭时触发
方法:
socket.send() 使用连接发送数据 socket.close() 关闭连接
二、有了大概的了解接下来就开始实现这么一个实例
1.客户端
<!doctype html> <html> <head> <meta charset="utf-8" /> <title></title> </head> <body > <div style="margin-left: 650px;"> <form id="form"> <input type="input" name="" id="sendinfo" value="" /> <button type="submit">提交</button> </form> <div id="hello" style="border: dashed 1px black;height: 500px;width: 500px;margin-top: 10px;"> </div> </div> </body> <script type="text/javascript"> var test=function(){ var print=document.getelementbyid('hello'); var form = document.getelementbyid('form'); var input = document.getelementbyid('sendinfo'); print.innerhtml += "connecting to server ..<br/>"; window.ws = new websocket('ws://localhost:9898/'); //监听webscoket服务端口 //监听消息状态 ws.onmessage=function(eve){ print.innerhtml+=eve.data+'<br/>' } //监听链接状态 ws.onopen=function(){ print.innerhtml+='connection open <br/>' } //监听关闭状态 ws.onclose = function () { print.innerhtml += 'connection closed<br/>'; } //向服务器端发送消息 form.addeventlistener('submit',function(e){ e.preventdefault(); var val="客户端:"+input.value; ws.send(val); input.value=""; }) } window.onload=test(); </script> </html>
2.服务端创建一个c#控制台程序
using fleck; using system; using system.collections.generic; using system.linq; using system.text; using system.threading.tasks; namespace webscoket { class program { static void main(string[] args) { var allscokets = new list<iwebsocketconnection>(); var server = new websocketserver("ws://127.0.0.1:9898"); //创建webscoket服务端实例 server.start(scoket=> { scoket.onopen = () => { console.writeline("open"); allscokets.add(scoket); }; scoket.onclose = () => { console.writeline("close"); allscokets.remove(scoket); }; scoket.onmessage =message => { console.writeline(message); allscokets.tolist().foreach(s=>s.send(message)); }; }); var input = console.readline(); while (input != "exit") { foreach (var socket in allscokets.tolist()) { socket.send("服务端:"+input); } input = console.readline(); } } } }
3.运行效果
上一篇: 青岛好吃的有什么,一起来看看
下一篇: 超美味的黑芝麻酱怎么吃最好