当前位置: 移动技术网 > IT编程>开发语言>c# > 用C#搭建WebSocket

用C#搭建WebSocket

2019年10月18日  | 移动技术网IT编程  | 我要评论
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.运行效果

 

 

 

  

 

 

  

 

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网