C# 接收对客户端请求的服务器响应

C# 接收对客户端请求的服务器响应,c#,websocket,websocket-sharp,C#,Websocket,Websocket Sharp,目前我正在使用WebSocket Sharp。我能够通过我的应用程序连接到服务器,并且我能够发送Client.send(Move.HeadNod)到服务器”按钮。然而,即使我宣布 private WebSocket client; const string host="ws://localhost:80"; public Form1() { InitializeComponent(); client=new WebSocket(host); client.connect(

目前我正在使用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);
}
我仍然无法从服务器获得响应并在之后继续发送命令。 编辑


这是在我的机器上运行的完整代码。在两个事件处理程序中放置一个断点以查看发生了什么。可能您的web套接字服务器抛出异常,而您只是不知道:

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

这是一个web表单应用程序吗?如果选择“是”,则在不进行更改的情况下无法更改文本框文本postback@AlenGenzić这是一个windows窗体应用程序嗨,我在我的问题中编辑了我的代码,这是我使用的和另一个按钮事件来发送一个请求,仅此而已。至于nf.Notify,我没有用于该引用的.dll。您好,我已经做了您的建议,但是因为我在与textbox控制线程相同的线程上运行此线程,我无法更新textbox,因为线程问题。请参阅我更新的答案,它应该可以解决您的跨线程问题!很抱歉打扰您,但当前每当我发送请求并收到响应时,响应都会覆盖旧的响应。有什么方法可以防止覆盖吗?好消息,也请不要忘记标记我的答案:)
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");
    }
}