WebSocket异步通讯,实时返回数据
第一种方式
// 服务端:
//var listener = new HttpListener();
// listener.Prefixes.Add("http://*:8080/");
//listener.Start();
//var context = await listener.GetContextAsync();
//var wsContext = await context.AcceptWebSocketAsync(null);
//var ws = wsContext.WebSocket;
// 客户端:
//var ws = new ClientWebSocket();
//await ws.ConnectAsync(new Uri("ws://127.0.0.1:8080"), CancellationToken.None);
#region MyRegion
// 1. 使用.NET4.5 自带的WebSocket
//服务端:
//var listener = new HttpListener();
// listener.Prefixes.Add("http://*:8080/");
//listener.Start();
//var context = await listener.GetContextAsync();
// var wsContext = await context.AcceptWebSocketAsync(null);
// var ws = wsContext.WebSocket;
// 客户端:
//var ws = new ClientWebSocket();
// await ws.ConnectAsync(new Uri("ws://127.0.0.1:8080"), CancellationToken.None);
//2. 使用 websocket-sharp dll提供的 WebSocket(支持.NET4.0)
//客户端:
//_caiNiaoWs = new WebSocket(WsUrl);
// _caiNiaoWs.OnMessage += (sender, e) => OnMessage(e.Data);
// _caiNiaoWs.Connect();
// 3. 使用 Socket 类(支持.NET4.0)
第二种方式
//int port = 1234;
//string host = "127.0.0.1";
//IPAddress ip = IPAddress.Parse(host);
//IPEndPoint ipe = new IPEndPoint(ip, port);
//Socket sSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//sSocket.Bind(ipe);
//sSocket.Listen(0);
//Console.WriteLine("监听已经打开,请等待");
////receive message
//Socket serverSocket = sSocket.Accept();
//Console.WriteLine("连接已经建立");
//string recStr = "";
//byte[] recByte = new byte[4096];
//int bytes = serverSocket.Receive(recByte, recByte.Length, 0);
//recStr += Encoding.ASCII.GetString(recByte, 0, bytes);
////send message
//Console.WriteLine("服务器端获得信息:{0}", recStr);
//string sendStr = "send to client :hello";
//byte[] sendByte = Encoding.ASCII.GetBytes(sendStr);
//serverSocket.Send(sendByte, sendByte.Length, 0);
//serverSocket.Close();
//sSocket.Close();
//int port = 1234;
//string host = "127.0.0.1";//服务器端ip地址
//IPAddress ip = IPAddress.Parse(host);
//IPEndPoint ipe = new IPEndPoint(ip, port);
// Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//clientSocket.Connect(ipe);
////send message
//string sendStr = "begin#70";
//byte[] sendBytes = Encoding.ASCII.GetBytes(sendStr);
//clientSocket.Send(sendBytes);
////receive message
//string recStr = "";
//byte[] recBytes = new byte[4096];
//int bytes = clientSocket.Receive(recBytes, recBytes.Length, 0);
//recStr += Encoding.ASCII.GetString(recBytes, 0, bytes);
//Console.WriteLine(recStr);
//clientSocket.Close();
实时响应
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Net.WebSockets;
using System.IO;
namespace WebSocketTest
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("start....");
//4.0方式
string url = "ws://127.0.0.1:1234/";
try
{
ClientWebSocket cln = new ClientWebSocket();
cln.ConnectAsync(new Uri(url), new CancellationToken()).Wait();
byte[] bytess = Encoding.Default.GetBytes("begin#70");
cln.SendAsync(new ArraySegment<byte>(bytess), WebSocketMessageType.Text, true, new CancellationToken()).Wait();
byte[] bytes2 = new byte[1000 * 500];
//var webSocketReceiveResult = cln.ReceiveAsync(new ArraySegment<byte>(bytes2), CancellationToken.None);
Program.GG(cln);//异步方法,很关键,
//string xx = Encoding.Default.GetString(bytes2);
Console.WriteLine("11111111111");
Console.Read();
}
catch (Exception ex)
{
string ss = ex.ToString();
Console.WriteLine(ss);
//}
Console.Read();
}
}
public static async void GG(ClientWebSocket clientWebSocket)
{
ArraySegment<Byte> buffer = new ArraySegment<byte>(new Byte[8192]);
WebSocketReceiveResult result = null;
using (var ms = new MemoryStream())
{
do
{
result = await clientWebSocket.ReceiveAsync(buffer, CancellationToken.None);
//result = cln.ReceiveAsync(buffer, CancellationToken.None);
ms.Write(buffer.Array, buffer.Offset, result.Count);
}
while (!result.EndOfMessage);
ms.Seek(0, SeekOrigin.Begin);
if (result.MessageType == WebSocketMessageType.Text)
{
using (var reader = new StreamReader(ms, Encoding.UTF8))
{
// do stuff
string xx = reader.ReadToEnd();
Console.WriteLine(xx);
}
}
}
}
}
}
WebSocket异步通讯,实时返回数据的更多相关文章
- WebSocket异步通讯,实时返回数据实例
定义类中的异步方法 using System;using System.Collections.Generic;using System.IO;using System.Linq;using Syst ...
- WebSocket异步通讯,实时返回数据相关问题论坛
https://stackoverflow.com/questions/23773407/a-websockets-receiveasync-method-does-not-await-the-ent ...
- WebSocketTest 异步通讯,实时返回数据
using System;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;usin ...
- ajax返回数据为undefined
在使用ajax异步请求后台返回数据后,使用console.log(data.message)打印返回数据,显示为undefined.苦恼了很久,终于在网上找到了答案. 先给大家看下异步代码: /*清零 ...
- jquery的ajax异步请求接收返回json数据
http://www.jb51.net/article/51122.htm jquery的ajax异步请求接收返回json数据方法设置简单,一个是服务器处理程序是返回json数据,另一种就是ajax发 ...
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
作者:ssslinppp 时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...
- java SSM框架 代码生成器 快速开发平台 websocket即时通讯 shiro redis
A代码编辑器,在线模版编辑,仿开发工具编辑器,pdf在线预览,文件转换编码 B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,快速开发利器)+快速表单构建器 freemaker模版技术 , ...
- java SSM 框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码
A 调用摄像头拍照,自定义裁剪编辑头像 [新录针对本系统的视频教程,手把手教开发一个模块,快速掌握本系统]B 集成代码生成器 [正反双向](单表.主表.明细表.树形表,开发利器)+快速构建表单; 技 ...
- java SSM 框架 代码生成器 websocket即时通讯 shiro redis
1. 权限管理:点开二级菜单进入三级菜单显示 角色(基础权限)和按钮权限 角色(基础权限): 分角色组和角色,独立分配菜单权限和增删改查权限. 按钮权限: 给角色分配按钮权限. ...
随机推荐
- 标准盒模型、IE盒模型
结论:IE盒模型是陈旧知识点,除了帮助理解css3 box-sizing: border-box(等分宽度布局)外没什么用. 标准(W3C)模型中:CSS中的宽(width) = 内容 (conten ...
- Centos 03 基础命令
切换目录 cd ~ 切换到当前用户的家目录 cd - 切换到上一次的目录 上传与下载 支持包在Dial-up Networking Support选项里,没有装可以通过 1.yum install l ...
- 【mmall】mybatis三剑客
mybatis-generator mybatis-plugin Mybatis Plugin插件安装破解及使用:http://blog.csdn.net/u011410529/article/det ...
- STL之heap学习
C++标准库中的堆-heap make_heap函数,包括两个参数(begin(number),end(number)).(左闭右开) pop_heap函数,包括两个参数,起始位置和终止位置,将当前区 ...
- Polish Extraction Zone
声明贴花组件 UPROPERTY(VisibleAnywhere, Category = "Components") UDecalComponent* DecalComp; 添加头 ...
- html转成pdf,下载(html2canvas 和 jsPDF)
参考链接:https://github.com/linwalker/render-html-to-pdf
- SpringCloud Zuul(路由网关)
⒈Zuul是什么? Zuul包含了两个最主要的功能,对请求的路由和过滤.其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础.过滤器功能则负责对请求的处理过程进行干预,是实 ...
- 20165231 2017-2018-2 《Java程序设计》第4周学习总结
教材学习内容总结 第五章 子类与父类: 所谓的子类,必须是一个类继承了另一个类,这个类才是子类:比如:public class A extend B这就是说A类继承了B类,那么A就是B的子类:B是A的 ...
- 代码学习-Linux内核网卡收包过程(NAPI)【转】
转自:https://blog.csdn.net/crazycoder8848/article/details/46333761 版权声明:本文没有任何版权限制,任何人可以以任何方式使用本文. htt ...
- Jetbrain系列软件配置文件同步
https://intellij-support.jetbrains.com/hc/en-us/articles/206544519-Directories-used-by-the-IDE-to-st ...