【问题标题】:Receiving back server response towards clients request接收服务器对客户端请求的响应
【发布时间】:2018-07-17 06:36:27
【问题描述】:

目前我正在使用 WebSocket-Sharp。我可以通过我的应用程序连接到服务器,并且可以在单击按钮时向服务器发送Client.Send(Move.HeadNod);。但是,即使我声明了

private WebSocket client;
const string host="ws://localhost:80";
public Form1()
{
    InitializeComponent();
    client=new WebSocket(host);
    client.connect();
    Client.OnMessage+=client_OnMessage 
}

地点:

client_OnMessage(object sender,MessageEventArgs e)
{
    textbox1.text=convert.tostring(e);
    client.send(move.headleft);
}

我仍然无法从服务器获得响应并在之后继续发送命令。 编辑

void Client_OnMessage(object sender,MessageEventArgs e)
{
    if(e.IsText)
    {
        edata=e.data;
        return;
    }
    else if(e.IsBinary)
    {
        Textbox1.Text=Convert.Tostring(e.RawData);
        return;
    }
}

【问题讨论】:

  • 这是一个网络表单应用程序吗?如果是,您不能在不进行回发的情况下更改文本框文本
  • @AlenGenzić 这是一个窗体应用程序

标签: c# websocket websocket-sharp


【解决方案1】:

这是在我的机器上运行的完整代码。在两个事件处理程序中放置一个断点,看看会发生什么。也许你的 web socket 服务器抛出了一个异常,而你只是不知道:

public partial class Form1 : Form
{
    private readonly WebSocket _client;

    public Form1()
    {
        InitializeComponent();
        _client = new WebSocket("ws://echo.websocket.org");
        _client.OnMessage += Ws_OnMessage;
        _client.OnError += Ws_OnError;
        _client.Connect();
    }

    private void Ws_OnError(object sender, ErrorEventArgs e)
    {
    }

    private void Ws_OnMessage(object sender, MessageEventArgs e)
    {
        if (e.IsText)
        {           
            Invoke(new MethodInvoker(delegate () {
                textBox1.Text = e.Data;
            }));
        }
        else if (e.IsBinary)
        {
            Invoke(new MethodInvoker(delegate () {
                textBox1.Text = Convert.ToString(e.RawData);
            }));               

        }
    }

    private void button1_Click(object sender, System.EventArgs e)
    {
        _client.Send("Hi");
    }
}

【讨论】:

  • 嗨,我已经在我的问题中编辑了我的代码,这是我使用的和另一个按钮事件来发送一个请求,仅此而已。至于 nf.Notify,我没有该参考的 .dll。
  • 嗨,我已经做了你的建议,但是因为我在与文本框控制线程相同的线程上运行它,由于线程问题,我无法更新文本框。
  • 查看我的更新答案,它应该可以解决您的跨线程问题
  • 哦,它有效!很抱歉给您带来困扰,但目前每当我发送请求并收到响应时,响应都会覆盖旧响应。有什么办法可以防止覆盖?
  • 好消息,也请不要忘记标记我的答案:)
猜你喜欢
  • 1970-01-01
  • 2021-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
  • 2020-03-22
相关资源
最近更新 更多