2014-10-30 2 views
1

Я пишу websockets-client. У меня есть две проблемы:Сервер не получал сообщений

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

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

System.Exception: Вы должны отправить данные WebSocket после WebSocket является открыт

клиент на C# (Websocket4Net ОМТ)

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();  
       }  
      } 

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

+0

Пожалуйста UP тему :( – Serg

+0

намеков погрешности в Вы уверены, что сокет подключен до отправки данных? Плохая практика заключается в том, чтобы предположить, что соединение подключено, проверьте состояние перед отправкой данных. – Wranorn

+0

@Wranorn, посмотрите обновленный код. Замораживание клиентского сокета на " Подключение ". – Serg

ответ

0

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

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

      return true; 
     } 
Смежные вопросы