• WebSocket异步通讯,实时返回数据实例


    定义类中的异步方法

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Net.WebSockets;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
    using WindowsServiceTest;

    namespace WindowsService
    {
    /// <summary>
    /// 客户端的通讯公共类对象
    /// </summary>
    public class WindowsOSHelperUtils
    {

    /// <summary>
    /// Socket通讯的url
    /// </summary>
    //public static string Url = "ws://192.168.1.11:1234/";

    public static async Task<string> Login(string name, string no, string level, string imagestring)
    {
    ClientWebSocket cln = new ClientWebSocket();
    cln.ConnectAsync(new Uri(FunctionBaseClass.SocketUrl), new CancellationToken()).Wait();
    byte[] bytess = Encoding.Default.GetBytes($"login#{name}#{no}#{level}#{imagestring}");
    cln.SendAsync(new ArraySegment<byte>(bytess), WebSocketMessageType.Text, true, new CancellationToken()).Wait();
    string returnValue = await GetAsyncValue(cln);//异步方法
    return returnValue;
    }


    public static async Task<string> EvaluateWithReasons()
    {
    ClientWebSocket cln = new ClientWebSocket();
    cln.ConnectAsync(new Uri(FunctionBaseClass.SocketUrl), new CancellationToken()).Wait();
    byte[] bytess = Encoding.Default.GetBytes($"asses");
    cln.SendAsync(new ArraySegment<byte>(bytess), WebSocketMessageType.Text, true, new CancellationToken()).Wait();
    string returnValue = await GetAsyncValue(cln);//异步方法
    return returnValue;
    }


    public static async Task<string> FaceValidateWithIdCard()
    {
    //FaceValidateWithIdCard faceValidateWithIdCard = (FaceValidateWithIdCard)command;
    ClientWebSocket cln = new ClientWebSocket();
    cln.ConnectAsync(new Uri(FunctionBaseClass.SocketUrl), new CancellationToken()).Wait();
    byte[] bytess = Encoding.Default.GetBytes($"begin");
    cln.SendAsync(new ArraySegment<byte>(bytess), WebSocketMessageType.Text, true, new CancellationToken()).Wait();
    string returnValue = await GetAsyncValue(cln);//异步方法
    return returnValue;
    #region MyRegion
    //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);

    // //GetAsyncValue(cln);//异步方法,很关键

    // //string xx = Encoding.Default.GetString(bytes2);
    // Console.WriteLine("11111111111");
    // Console.Read();

    //}
    //catch (Exception ex)
    //{
    // string ss = ex.ToString();
    // Console.WriteLine(ss);
    // //}
    // Console.Read();
    //}
    #endregion
    }

    public static async Task<string> GetAsyncValue(ClientWebSocket clientWebSocket)
    {
    string returnValue = null;
    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);
    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))
    {
    returnValue = reader.ReadToEnd();
    //Console.WriteLine(returnValue);
    }
    }
    }
    return returnValue;
    }
    }
    }

    调用异步方法

    string returnvalue = WindowsOSHelperUtils.Login(userName, userNo, "5", byteString).Result;

    string returnvalue = WindowsOSHelperUtils.EvaluateWithReasons().Result;

    string returnvalue = WindowsOSHelperUtils.FaceValidateWithIdCard().Result;

  • 相关阅读:
    D3 data
    cubism.js
    git
    Render函数
    Vue 响应式原理
    JSSDK使用步骤
    用js获取access_token
    微信公众平台appid和appsecret在哪
    组件
    表单控件绑定
  • 原文地址:https://www.cnblogs.com/1175429393wljblog/p/9898813.html
Copyright © 2020-2023  润新知