服务器没有收到消息

服务器没有收到消息

问题描述:

我正在写一个websockets-client。我有两个问题:服务器没有收到消息

  1. 当我关闭应用程序的窗口一台服务器出现故障

  2. 服务器没有收到消息,但客户端总是从服务器接收到的问候信息。

System.Exception的:你必须通过的WebSocket后的WebSocket是 打开

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

它永久的说“连接”。

+0

请这个话题:( – Serg 2014-10-31 04:48:13

+0

在错误提示代码时定时问题,你确定套接字在数据发送之前已经连接好了吗?错误的做法是假定连接已经连接,在发送数据之前检查状态 – Wranorn 2014-10-31 05:37:13

+0

@Wranorn,查看更新后的代码客户端套接字冻结在“连接“状态 – Serg 2014-10-31 06:34:19

我怀疑这可能是与握手错误 - 看着我看到,如果没有握手作出这个错误被抛出

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

      return true; 
     }