C# 在C中使用TCP从客户端错误接收多个响应#

C# 在C中使用TCP从客户端错误接收多个响应#,c#,tcp,tcpclient,tcplistener,C#,Tcp,Tcpclient,Tcplistener,因此,我试图制作一个代码,其中TCP将接受所有涉及重复接受客户端的客户端,但当我使用该代码时,我无法收到客户端的任何响应,因此如何解决此问题 消息框甚至不会在服务器上弹出 缓冲区位置的代码(后台工作程序): 当客户端将响应发送回服务器(后台工作程序)时,我将显示messagebox的代码: 下面是代码的一部分,其中客户端从服务器接收响应,然后向服务器发送消息(代码的一部分,但主要关注这一点): 不能从非UI线程(在本例中为后台工作线程)更新UI 更改: while(true) {

因此,我试图制作一个代码,其中TCP将接受所有涉及重复接受客户端的客户端,但当我使用该代码时,我无法收到客户端的任何响应,因此如何解决此问题

消息框甚至不会在服务器上弹出

缓冲区位置的代码(后台工作程序):

当客户端将响应发送回服务器(后台工作程序)时,我将显示messagebox的代码:

下面是代码的一部分,其中客户端从服务器接收响应,然后向服务器发送消息(代码的一部分,但主要关注这一点):


不能从非UI线程(在本例中为后台工作线程)更新UI

更改:

while(true)
        {
            string data = Encoding.Unicode.GetString(buffer, 0, 
streamer.Read(buffer, 0, client.ReceiveBufferSize));
            if(data == "Response_Command_329873123709123")
            {
                MessageBox.Show(Encoding.Unicode.GetString(buffer, 0, 
streamer.Read(buffer, 0, client.ReceiveBufferSize)), "Client Response");
            }
        }
…致:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

    while(true)
    {
        string data = Encoding.Unicode.GetString(buffer, 0, 
                       streamer.Read(buffer, 0, client.ReceiveBufferSize));
        if(data == "Response_Command_329873123709123")
        {
            var message = Encoding.Unicode.GetString(buffer, 0, 
                                   streamer.Read(buffer, 0, client.ReceiveBufferSize));

            worker.ReportProgress (0,  message);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        MessageBox.Show((string)e.UserState, "Client Response");
    }

我想我的缓冲区部分出错了,但我已经修复了

int databases = streamer.Read(buffers, 0, buffers.Length);
                string data = Encoding.Unicode.GetString(buffers, 0, databases);
                if (data == "Response_Command_329873123709123")
                {
                    byte[] datacen = new byte[client.ReceiveBufferSize];
                    int main = streamer.Read(datacen, 0, datacen.Length);
                    var message = Encoding.Unicode.GetString(datacen, 0, main);
                    MessageBox.Show(message, "Client Response");
                }

谢谢你的帮助,但是由于某些原因,这不起作用。我已经用你提供给我的新代码编辑了我的问题。那么代码中有错误吗?虽然我也启用了reportprocess@zhiyan114当然,你需要将上述模式应用到你的其他员工身上。对不起,我应该说清楚的。看看你是如何快速更新你的答案的,我已经把它修好了,是的,messagebox在后台工作程序中使用时确实会显示出来。@zhiyan114将你的声明作为一个答案发布给大家看
while(true)
        {
            string data = Encoding.Unicode.GetString(buffer, 0, 
streamer.Read(buffer, 0, client.ReceiveBufferSize));
            if(data == "Response_Command_329873123709123")
            {
                MessageBox.Show(Encoding.Unicode.GetString(buffer, 0, 
streamer.Read(buffer, 0, client.ReceiveBufferSize)), "Client Response");
            }
        }
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;

    while(true)
    {
        string data = Encoding.Unicode.GetString(buffer, 0, 
                       streamer.Read(buffer, 0, client.ReceiveBufferSize));
        if(data == "Response_Command_329873123709123")
        {
            var message = Encoding.Unicode.GetString(buffer, 0, 
                                   streamer.Read(buffer, 0, client.ReceiveBufferSize));

            worker.ReportProgress (0,  message);
        }
    }

    private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        MessageBox.Show((string)e.UserState, "Client Response");
    }
int databases = streamer.Read(buffers, 0, buffers.Length);
                string data = Encoding.Unicode.GetString(buffers, 0, databases);
                if (data == "Response_Command_329873123709123")
                {
                    byte[] datacen = new byte[client.ReceiveBufferSize];
                    int main = streamer.Read(datacen, 0, datacen.Length);
                    var message = Encoding.Unicode.GetString(datacen, 0, main);
                    MessageBox.Show(message, "Client Response");
                }