WebSocket Client con C#
La tecnología de websocket se ha hecho muy
popular y es que realmente nos permite hacer algunas cosas muy fáciles como la
posibilidad de habilitar una conexión desde nuestra aplicación web para poder
transportar datos.
En este caso vamos a ver como crear un cliente WebSocket
con C#
Vamos a crear una aplicación de console. Mi proyecto
tiene el nombre de WebSocketClient. Con el proyecto listo ya podemos iniciar a
escribir nuestro código para conexión.
Lo primero que debemos hacer es importar algunas
librerías para poder crear la conexión.
using System; using System.IO; using System.Net.WebSockets; using System.Text; using System.Threading;
Como se puede observar lo primero que vamos a
declarar es la variable url que contiene la dirección del WebSocket
public class Program { private const string url = "ws://echo.websocket.org"; public static async System.Threading.Tasks.Task Main(string[] args) { //Iniciamos un cliente websocket para conectarnos con el servidor using (var websocket = new ClientWebSocket()) { //Asignamos el url del servidor de websocket y nos conectamos await websocket.ConnectAsync(new Uri(url), CancellationToken.None); Console.WriteLine("Message to the server"); var info = Console.ReadLine();//Mensaje que se quiere enviar al servidor //Enviamos el mensaje que capturamos desde la consola await websocket.SendAsync(Encoding.UTF8.GetBytes(info), WebSocketMessageType.Text, true, CancellationToken.None); //Creamos un arreglo de bytes para recibir la información del servidor var buffer = new ArraySegment<byte>(new byte[2048]); WebSocketReceiveResult serverResponse; using (var ms = new MemoryStream())//Vamos almacenar todos los fragmentos de datos en este objeto en memoria. { do { //Vamos a recibir datos pequeños hasta que recibamos todo el mensaje. serverResponse = await websocket.ReceiveAsync(buffer, CancellationToken.None); ms.Write(buffer.Array, buffer.Offset, serverResponse.Count); } while (!serverResponse.EndOfMessage); if (serverResponse.MessageType == WebSocketMessageType.Close) Environment.Exit(0);//Si el socket se cierra salimos de la aplicación ms.Seek(0, SeekOrigin.Begin); using (var reader = new StreamReader(ms, Encoding.UTF8)) Console.WriteLine(await reader.ReadToEndAsync()); } } } }
Con un bloque using creamos un objeto de tipo
ClientWebSocket que nos permitirá la conexión con el servidor. Para poder
iniciar la conexión se tiene que pasar la dirección del servidor al método connectAsync.
La variable info nos permite almacenar
cualquier dato que el usuario quiera pasarle al servidor. Luego se pasa al método
sendAsync para ser enviado.
En el caso de recibir datos es un poco más complicado.
Para esto vamos a recibir tamaños pequeños de información. Almacenándolos en un
arreglo de bytes como podemos ver en la variable buffer. Si lo que el servidor
nos envía es mayor se va a ir almacenando en la variable ms. En memoria hasta
tener toda la información completa. Por eso utilizamos un ciclo.
Cuando tenemos toda la información en la variable
ms se debe convertir a un StreamReader que luego la pasaremos en un texto. Esto
es lo que al final estamos esperando, como resultado se muestra lo leído en la
consola de nuestra app.
Etiquetas: .netcore, apps, Desarrollo, desktop app, Programación, websocket
0 comentarios:
Publicar un comentario
Suscribirse a Enviar comentarios [Atom]
<< Inicio