c# - 无法在 WebSocket 客户端中接收消息

标签 c# websocket websocket4net

我正在使用 websocket4net在 C# 中创建 WebSocket 客户端并与服务器通信。

我可以发送数据,但无法收到服务器发回的回复。 Client_MessageReceived 根本没有被触发。不过,我可以在 WireShark 中看到回复。

我使用的代码如下:

class CommandRPC
{
    public String jsonrpc;
    public String method;
    public Parameter @params;
    public String id;
}    

class Parameter
{
    public String cmd;
}

class Program
{
    static WebSocket Client;

    static CommandRPC command;

    static void Main(string[] args)
    {
        Client = new WebSocket("ws://10.131.35.32/DIAG");
        Client.Opened += new EventHandler(Client_Opened);
        Client.Error += new EventHandler<SuperSocket.ClientEngine.ErrorEventArgs>(Client_Error);
        Client.Closed += new EventHandler(Client_Closed);
        Client.MessageReceived += new EventHandler<MessageReceivedEventArgs>(Client_MessageReceived);
        Client.DataReceived += new EventHandler<DataReceivedEventArgs>(Client_DataReceived);


        command = new CommandRPC();
        command.jsonrpc = "2.0";
        command.method = "SystemExec";
        command.@params = new Parameter();
        command.@params.cmd = "ls";
        command.id = "8302144";

        Client.Open();
        System.Threading.Thread.Sleep(2000);
        Console.WriteLine(Client.State);
        Console.ReadLine();
    }


    static void Client_DataReceived(object sender, DataReceivedEventArgs e)
    {
        Console.WriteLine("DATA received : " + e.Data);
    }

    static void Client_MessageReceived(object sender, MessageReceivedEventArgs e)
    {
        Console.WriteLine("Message received : " + e.Message);            
    }

    static void Client_Closed(object sender, EventArgs e)
    {
        Console.WriteLine("Websocket closed");
    }

    static void Client_Error(object sender, SuperSocket.ClientEngine.ErrorEventArgs e)
    {
        Console.WriteLine("Error thrown trying to open websocket : " + e.Exception.Message);
    }

    static void Client_Opened(object sender, EventArgs e)
    {
        var json = new JavaScriptSerializer().Serialize(command);            
        Console.WriteLine("Websocket connection open.");

        for (int i = 1; i <= 2; i++)
        {
            Console.WriteLine("Sending Json: " + i.ToString());
            Client.Send(json);
            System.Threading.Thread.Sleep(500);
        }   
    }
}

最佳答案

使用

   Task.Delay(300) //instead of Thread.Sleep(2000)

它应该可以解决问题

关于c# - 无法在 WebSocket 客户端中接收消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19380776/

相关文章:

c# - LINQ 选择不同的 c#

javascript - 按下键盘时的 WebSocket 事件

xamarin - WebSocket4Net 简单示例失败,错误为 "Operation already in progress"

c# - 如果未选中 DataGridColumn/Row 中的任何复选框,则显示 MessageBox

C# Entity Framework 在 ExecuteFunction 上抛出错误

javascript - BINANCE API - 如何使用用户数据流获取账户信息

javascript - Node websockets/ws - WSS : How to tell if I closed the connection, 或者他们做到了?

c# - 是否可以将 UDP 与 Web 套接字一起使用而不是 TCP

c# - 自定义控件内部属性的 ASP.Net 绑定(bind)属性