WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。

WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

在 WebSocket API 中,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。

今天在这里我会用C#搭建WebSocket服务端演示WebSocket的通信过程

一、WebSocket中的事件、属性和方法

  属性:

  Socket.readyState                   只读属性 readyState 表示连接状态,可以是以下值:
- 表示连接尚未建立。
- 表示连接已建立,可以进行通信。
- 表示连接正在进行关闭。
- 表示连接已经关闭或者连接不能打开。
  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.运行效果

 

  

  

用C#搭建WebSocket的更多相关文章

  1. 使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  2. 【C#】MVC项目中搭建WebSocket服务器

    前言 因为项目需要,前端页面中需要不断向后台请求获取一个及一个以上的状态值.最初的方案是为每个状态值请求都建立一个定时器循环定时发起Ajax请求,结果显而 易见.在HTTP1.1协议中,同一客户端浏览 ...

  3. (转)使用Node.js+Socket.IO搭建WebSocket实时应用

    Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新.它有着广泛的应用场景,比如在线聊天室.在线客服系统.评论系统.WebIM等. W ...

  4. 使用Node.js+Socket.IO搭建WebSocket实时应用【转载】

    原文:http://www.jianshu.com/p/d9b1273a93fd Web领域的实时推送技术,也被称作Realtime技术.这种技术要达到的目的是让用户不需要刷新浏览器就可以获得实时更新 ...

  5. 【Netty】(7)---搭建websocket服务器

    [Netty](7)---搭建websocket服务器 说明:本篇博客是基于学习某网有关视频教学. 目的:创建一个websocket服务器,获取客户端传来的数据,同时向客户端发送数据 一.服务端 1. ...

  6. 搭建websocket消息推送服务,必须要考虑的几个问题

    近年,不论是正在快速增长的直播,远程教育以及IM聊天场景,还是在常规企业级系统中用到的系统提醒,对websocket的需求越来越大,对websocket的要求也越来越高.从早期对websocket的应 ...

  7. Netty 搭建 WebSocket 服务端

    一.编码器.解码器 ... ... @Autowired private HttpRequestHandler httpRequestHandler; @Autowired private TextW ...

  8. netty系列之:使用netty搭建websocket服务器

    目录 简介 netty中的websocket websocket的版本 FrameDecoder和FrameEncoder WebSocketServerHandshaker WebSocketFra ...

  9. 在IIS上搭建WebSocket服务器(一)

    一.搭建环境 1.System.Web.WebSockets需搭建在Windows8及Server2012以上系统的上. 2.在Windows8及Server2012以上系统的上安装IIS和WebSo ...

随机推荐

  1. Linux虚拟机修改ip地址,查看网关,网络环境配置

    修改虚拟机的ip地址: 进入如下界面,直接修改子网ip即可. 查看网关: Linux网络环境配置: 第一种方式(自动获取): 说明:登陆后,通过界面来设置自动获取ip 我们先进入设置: 把自动连接勾上 ...

  2. AB PLC简述

    一.  PLC基础概念 PLC:可编程序控制器是一种数字运算的电子系统,专为在工业环境下应用而设计.采用可编程的存储器,用来在内部存储执行逻辑运算.顺序控制.定时.计算和算术运算等操作的指令,并通过数 ...

  3. JAVA并发-join

    概念 join方法,一种特殊的wait,当前运行线程调用另一个线程的join方法,当前线程进入阻塞状态直到调用join方法的线程结束,再继续执行. 一般情况下,都是主线程创建一个子线程,子线程调用jo ...

  4. HTML元素脱离文档流的三种方法

    一.什么是文档流? 将窗体自上而下分成一行一行,并在每行中按从左至右依次排放元素,称为文档流,也称为普通流. 这个应该不难理解,HTML中全部元素都是盒模型,盒模型占用一定的空间,依次排放在HTML中 ...

  5. POJ2536-Gopher II-(匈牙利算法)

    题意:n只老鼠,m个洞,s秒逃命,逃命速度为v,一个洞只能保住一只老鼠,最少多少只老鼠会被老鹰抓到. 题解:找出每只老鼠有哪些洞可以保命,建立二分图,算出最大匹配,不是求保住命的老鼠,而是求被抓住的老 ...

  6. CUDA10安装配置

    https://developer.nvidia.com/cuda-downloads?target_os=Windows&target_arch=x86_64&target_vers ...

  7. 解决.Net Core 3.0 不支持 Autofac 问题

    Program.cs using System; using System.Collections.Generic; using System.Linq; using System.Threading ...

  8. 异常CLRDBG_NOTIFICATION_EXCEPTION_CODE( 0x04242420)的抛出过程

    新建一个c#控制工程,就用自动生成的代码,不用补任何代码,如下: using System; using System.Collections.Generic; using System.Linq; ...

  9. ESP8266 SDK开发: 测试下诱人的程序

    前言 这一节测试一下诱人的程序 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, APP显示ESP8266采集的温湿度数据. 简而言 ...

  10. Qt常用类——QFrame类与QWidge类

    QFrame与QWidget的区别: QFrame是基本控件的基类,QWidget是QFrame基类. QWidget类是所有用户界面对象的基类. Widget是用户界面的基本单元:它从窗口系统接收鼠 ...