Ответ 1
Используйте библиотеку WebSocketSharp и легко подключайтесь:
Клиент WebSocket
using System;
using WebSocketSharp;
namespace Example
{
public class Program
{
public static void Main (string[] args)
{
using (var ws = new WebSocket ("ws://dragonsnest.far/Laputa")) {
ws.OnMessage += (sender, e) =>
Console.WriteLine ("Laputa says: " + e.Data);
ws.Connect ();
ws.Send ("BALUS");
Console.ReadKey (true);
}
}
}
}
Шаг 1
Обязательное пространство имен.
using WebSocketSharp;
Класс WebSocket существует в пространстве имен WebSocketSharp.
Шаг 2
Создание нового экземпляра класса WebSocket с URL-адресом WebSocket для подключения.
using (var ws = new WebSocket ("ws://example.com")) {
...
}
Класс WebSocket наследует интерфейс System.IDisposable, поэтому вы можете использовать оператор using. И соединение WebSocket будет закрыто с состоянием закрытия 1001 (исчезает), когда элемент управления покидает блок использования.
Шаг 3
Установка событий WebSocket.
Событие WebSocket.OnOpen
Событие WebSocket.OnOpen
наступает, когда установлено соединение WebSocket.
ws.OnOpen += (sender, e) => {
...
};
Он прошел как System.EventArgs.Empty
, поэтому вам не нужно его использовать.
Событие WebSocket.OnMessage
Событие WebSocket.OnMessage
наступает, когда WebSocket получает сообщение.
ws.OnMessage += (sender, e) => {
...
};
Он прошел как WebSocketSharp.MessageEventArgs.
e.Type property
возвращает либо WebSocketSharp.Opcode.Text, либо WebSocketSharp.Opcode.Binary, который представляет тип сообщения. Таким образом, проверив его, вы можете определить, какой элемент вы должны использовать.
Если он возвращает Opcode.Text, вы должны использовать свойство e.Data, которое возвращает строку (представляет текстовое сообщение).
Или, если он возвращает Opcode.Binary
, вы должны использовать свойство e.RawData, которое возвращает байт [] (представляет двоичное сообщение).
if (e.Type == Opcode.Text) {
// Do something with e.Data.
...
return;
}
if (e.Type == Opcode.Binary) {
// Do something with e.RawData.
...
return;
}
Событие WebSocket.OnError
Событие WebSocket.OnError
наступает, когда WebSocket получает ошибку.
ws.OnError += (sender, e) => {
...
};
Он прошел как WebSocketSharp.ErrorEventArgs
.
Свойство e.Message возвращает строку, которая представляет сообщение об ошибке.
Если ошибка вызвана исключением, свойство e.Exception возвращает экземпляр System.Exception
, вызвавший ошибку.
Событие WebSocket.OnClose
Событие WebSocket.OnClose наступает, когда соединение WebSocket было закрыто.
ws.OnClose += (sender, e) => {
...
};
Он прошел как WebSocketSharp.CloseEventArgs
.
Свойство e.Code возвращает ushort, представляющий код состояния, указывающий причину закрытия, а свойство e.Reason возвращает строку, представляющую причину закрытия.
Шаг 4
Подключение к серверу WebSocket.
ws.Connect ();
Если вы хотите подключиться к серверу асинхронно, вы должны использовать метод WebSocket.ConnectAsync().
Шаг 5
Отправка данных на сервер WebSocket.
ws.Send (data);
Метод WebSocket.Send перегружен.
Вы можете использовать метод WebSocket.Send(string), WebSocket.Send(byte[])
или WebSocket.Send(System.IO.FileInfo)
для отправки данных.
Если вы хотите отправить данные асинхронно, вы должны использовать метод WebSocket.SendAsync.
ws.SendAsync (data, completed);
А также, если вы хотите что-то сделать, когда отправка завершена, вы должны установить в качестве завершенного любой делегат Action<bool>
.
Шаг 6
Закрытие соединения WebSocket.
ws.Close (code, reason);
Если вы хотите явно закрыть соединение, вам следует использовать метод WebSocket.Close
.
Метод WebSocket.Close перегружен.
Вы можете использовать метод WebSocket.Close(), WebSocket.Close(ushort), WebSocket.Close(WebSocketSharp.CloseStatusCode), WebSocket.Close(ushort, string) или WebSocket.Close(WebSocketSharp.CloseStatusCode, метод close). подключение.
Если вы хотите закрыть соединение асинхронно, вы должны использовать метод WebSocket.CloseAsync
.