资源简介
本项目是用C#控制台程序实现服务,非服务器实现,非服务器实现,非服务器实现
TestWebSocket - 服务器程序
TestWebSocket_Client - 客户端控制台程序
Index.html - 客户端H5页面(直接双击打开即可)
博文https://blog.csdn.net/u012949563/article/details/102873181
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.WebSockets;
using System.Text;
using System.Threading.Tasks;
namespace TestWebSocket
{
class Program
{
///
/// HTTP监听服务
///
private static HttpListener listener;
///
/// 接收数组
///
private static ArraySegment reciveBufs = new ArraySegment(new byte[0xFFFF]);
///
/// ws连接管理
///
private static List clients = new List();
///
/// 中途取消
///
private static System.Threading.CancellationToken cancel;
static void Main(string[] args)
{
var cancelSource = new System.Threading.CancellationTokenSource(); //初始化中途取消实例 (可能通过这个中途取消WS)
cancel = cancelSource.Token;
listener = new HttpListener(); //打开HTTP服务
listener.Prefixes.Add(“http://127.0.0.1:8080/“); //HTTP服务网址
listener.Start(); //开始监听HTTP
listener.BeginGetContext(Service listener); //异步接收
Console.WriteLine(“WebSocket service start!“);
while (true) //循环接收用户输入防止程序结束
{
var str = Console.ReadLine(); //读取一行输入
}
}
///
/// 异步接收(未做出错处理(try catch))
///
///
private static void Service(IAsyncResult ar)
{
var context = listener.EndGetContext(ar); //读取
new Task(() => ProContext(context)).Start(); //新进程处理
listener.BeginGetContext(Service listener); //继续异步接收
}
///
/// 处理ws连接
///
///
private static async void ProContext(HttpListenerContext context)
{
var wsContext = await context.AcceptWebSocketAsync(null); //获取上下文
Console.WriteLine($“{DateTime.Now} - {context.Request.RemoteEndPoint} - WebSocket conected!“); //显示有WS连接 (WS来者不据可在此通过IP等筛选连接)
using (var ws = wsContext.WebSocket) //使用using保证WS得到释放
{
clients.Add(ws); //管理WS连接
WebSocketReceiveResult wsdata; //接收结果变量
while (true)
{
try
{
wsdata = await ws.ReceiveAsync(reciveBufs cancel); //接收数据
}
catch {//接收失败退出连接
Console.WriteLine($“{DateTime.Now} - {context.Request.RemoteEndPoint} - out!“);
clients.Remove(ws); //管理ws连接
break;
}
byte[] bRec = new byte[wsdata.Count]; //接收数组
Array.Copy(recive
相关资源
- C#Excel大量数据快速导入数据库
- C# Winform 嵌入Google浏览器 Chrome 与JS交
- 《Unity5实战使用C#和Unity开发多平台游
- C# winform ATM-自动取款机模拟软件设计
- C# SQL教师信息管理系统
- C# 做的WINDOWS窗体程序-简易计算器
- C#完成的个人理财系统
- C#AJAX
- C#基于Halcon实现Basler相机采图SDK
- C#引入Redis时所需四个DLL
- C#获取usb设备VID和PID
- C#实现复数类,包括加减乘除乘方开方
- C#图像二值化代码
- 用遗传算法/模拟退火算法 求解旅行商
- 基于C#开发的图片处理工具
- C#简单工厂模式计算器
- C#SerialPort通信详细介绍
- 用C#窗体画一个可以指定角度的倾斜椭
- C# 实现贪吃蛇小游戏的设计编写
- winform窗体实现验证码功能
- C# winfrom窗体显示百度地图
- C#调用webservice查询实时天气
- C# 显示图片并且可以缩放和描绘矩形
- C#操作excel 类库
- Web程序设计—— ASP.NET实用网站开发课
- 测量程序设计,坐标正反算,方位角
- c#+AE 地图编辑、展示、鹰眼图
- c#银行取号代码
- c#图像噪声平滑处理
- c#做的快递查询
评论
共有 条评论