Ниже приведен фрагмент кода, который я использую для связи с веб-сокетом.
В вебскокете используется тип протокола XML для связи.
Я пытаюсь отправить серию запросов и жду ответа.
Вот следующий код:
static void Main(string[] args)
{
Thread.Sleep(1000);
Uri myUri = new Uri("ws://127.0.0.1:4848", UriKind.Absolute);
Connect(myUri).Wait();
Console.WriteLine("Press any key to exit...");
Console.ReadKey();
}
public static async Task Connect(Uri uri)
{
ClientWebSocket webSocket = null;
try
{
webSocket = new ClientWebSocket();
await webSocket.ConnectAsync(uri, CancellationToken.None);
byte[] buffer;
byte[] receiveBuffer = new byte[receiveChunkSize];
string[] requestStrings =
{
"request1",
"request2",
"request3"
};
foreach (var request in requestStrings)
{
buffer = encoder.GetBytes(request);
Task sendRequest = Send(webSocket, buffer);
await sendRequest;
Task receiveResponse = Receive(webSocket);
await receiveResponse;
}
}
catch (Exception ex)
{
Console.WriteLine("Exception: {0}", ex);
}
}
static UTF8Encoding encoder = new UTF8Encoding();
private static async Task Send(ClientWebSocket webSocket, byte[] buffer)
{
await webSocket.SendAsync(new ArraySegment<byte>(buffer), WebSocketMessageType.Text, true, CancellationToken.None);
LogStatus(false, buffer, buffer.Length);
}
private static async Task Receive(ClientWebSocket webSocket)
{
byte[] buffer = new byte[receiveChunkSize];
var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
LogStatus(true, buffer, result.Count);
}
private static void LogStatus(bool receiving, byte[] buffer, int length)
{
lock (consoleLock)
{
Console.ForegroundColor = receiving ? ConsoleColor.Green : ConsoleColor.Gray;
if (verbose)
Console.WriteLine(encoder.GetString(buffer));
Console.ResetColor();
}
}
}
Я не получаю ответов от веб-сокета.Я не уверен в том, что я делаю здесь неправильно.Вывод выглядит следующим образом:
Output:
request1
request2
request3