c # — сервер не получал сообщения

Я пишу веб-сокет-клиент. У меня две проблемы:

  1. Когда я закрываю окно своего приложения, сервер отключается

  2. Сервер не получил сообщения, но Клиент всегда получает приветственное сообщение от сервера.

System.Exception: вы должны отправить данные через веб-сокет после того, как веб-сокет
открытый

Клиент на C # (Websocket4Net lib)

private static void _clientSocket_Closed(object sender, EventArgs e)
{
if (_clientSocket.State == WebSocket4Net.WebSocketState.Open)
{
_clientSocket.Close("Closed by user");
}
}

public static void WebRequest(string url, dutyObject objToSend)
{
_clientSocket = new WebSocket(url);

_clientSocket.MessageReceived += _clientSocket_MessageReceived;
_clientSocket.DataReceived += _clientSocket_DataReceived;
_clientSocket.Closed += _clientSocket_Closed;
_clientSocket.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(_clientSocket_Error);

_clientSocket.Open();

var jsonMessage = JsonSerializeHelper.Serialize(objToSend);
_clientSocket.Send(jsonMessage);
}

Сервер на php

class Server extends WebSocketServer
{
protected function serverCreated()
{
}

/**
* This is run when server is receiving data.
*/
protected function process($connected_user, $message)
{
$this->send($connected_user,"[+]".$message); //just echo reply
}

/**
* This is run when socket connection is established. Send a greeting message
*/
protected function connected($connected_user)
{
$welcome_message = 'Welcome to Service. Service works with JSON. Be careful!';
$this->send($connected_user, $welcome_message);
}protected function closed($connected_user)
{
$this->stdout("User closed connection \n");
}
}

ОБНОВЛЕНИЕ на клиенте.

while (_clientSocket.State != WebSocketState.Open)
{
if (_clientSocket.State == WebSocket4Net.WebSocketState.Open)
{
Console.WriteLine(_clientSocket.State);
_clientSocket.Send(ecn.GetBytes(jsonMessage), 0, ecn.GetBytes(jsonMessage).Length);
}
else
{
Console.WriteLine("E: " + _clientSocket.State);
//_clientSocket.Close();
}
}

И это постоянно говорит «Подключение».

1

Решение

Я подозреваю, что это, вероятно, с ошибкой рукопожатия — при просмотре кода я увидел, что если рукопожатие не было сделано, эта ошибка выдается

private bool EnsureWebSocketOpen()
{
if (!Handshaked)
{
OnError(new Exception(m_NotOpenSendingMessage));
return false;
}

return true;
}
1

Другие решения

Других решений пока нет …