资源简介
本项目是用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#在一个窗口刷新更改另一个窗口控件
- C# TIP文件生成和拆解
- C#解析HL7消息的库135797
- C# OCR数字识别实例,采用TessnetOcr,对
- 考试管理系统 - C#源码
- asp.net C#购物车源代码
- C#实时网络流量监听源码
- C#百度地图源码
- Visual C#.2010从入门到精通配套源程序
- C# 软件版本更新
- C#屏幕软键盘源码,可以自己定制界面
- 智慧城市 智能家居 C# 源代码
- c#获取mobile手机的IMEI和IMSI
- C#实现简单QQ聊天程序
- 操作系统 模拟的 欢迎下载 C#版
- C#写的计算机性能监控程序
- 用C#实现邮件发送,有点类似于outlo
- MVC model层代码生成器 C#
- c#小型图书销售系统
- C# Socket Server Client 通讯应用 完整的服
- c# winform 自动登录 百度账户 源代码
- C#编写的16进制计算器
- C#TCP通信协议
- C# 数据表(Dataset)操作 合并 查询一
- C#语音识别系统speechsdk51,SpeechSDK51L
- 数据库备份还原工具1.0 C# 源码
-
[免费]xm
lDocument 节点遍历C# - EQ2008LEDc#开发实例
- DirectX.Capturec# winform 操作摄像头录像附
- c# 实现的最大最小距离方法对鸢尾花
评论
共有 条评论