C# TCP客户端不是从所有客户端接收数据,而是只从一个客户端接收数据

C# TCP客户端不是从所有客户端接收数据,而是只从一个客户端接收数据,c#,tcplistener,C#,Tcplistener,所以我尝试从每个客户端接收所有数据,但出于某种原因,它只想从一个客户端接收数据(随机),不想从其他客户端接收数据,所以我做错了什么 backgroundworker将每个客户端注册到其自己的新backgroundworker的代码: private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e) { BackgroundWorker worker = sender as BackgroundW

所以我尝试从每个客户端接收所有数据,但出于某种原因,它只想从一个客户端接收数据(随机),不想从其他客户端接收数据,所以我做错了什么

backgroundworker将每个客户端注册到其自己的新backgroundworker的代码:

private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        BackgroundWorker worker = sender as BackgroundWorker;
        while (true)
        {
            try
            {
                client = network.AcceptTcpClient();
                streamer = client.GetStream();
                worker.ReportProgress(0,"Client Accepted");
                buffers = new byte[client.ReceiveBufferSize];
                comboBox1.Invoke(new MethodInvoker(delegate { 
comboBox1.Items.Add(client.Client.RemoteEndPoint.ToString() + "_" + 
client.Client.LocalEndPoint.ToString()); }));
                listConnectedClients.Add(client);
                BackgroundWorker theworker = new BackgroundWorker();
                theworker.DoWork += bgwhelper(client);
                theworker.RunWorkerAsync();
            } catch(Exception ex)
            {
                MessageBox.Show(ex.Message,"Client Connection Error");
                client.Close();
                streamer.Close();
                Close();
            }
        }
处理每个客户端响应数据的代码:

public DoWorkEventHandler bgwhelper(TcpClient mainclients)
    {
        try
        {
            NetworkStream mainsteams = mainclients.GetStream();
            int databases = mainsteams.Read(buffers, 0, buffers.Length);
            string data = Encoding.Unicode.GetString(buffers, 0, databases);
            if (data == "cmd1")
            {
                byte[] datacen = new byte[mainclients.ReceiveBufferSize];
                int main = mainsteams.Read(datacen, 0, datacen.Length);
                var message = Encoding.Unicode.GetString(datacen, 0, main);
                MessageBox.Show(message, 
mainclients.Client.RemoteEndPoint.ToString() + "_" + 
mainclients.Client.LocalEndPoint.ToString() + "'s Response");
            } else if (data == "cmd2")
            {

            }
        } catch(Exception)
        {
            removeclient(mainclients);
        }
        return null;
    }

不确定如何使用
client
,但由于这行代码
client=network.AcceptTcpClient(),它将始终包含最近创建的客户端。哦,好的,我想代码将在那里暂停,直到新的客户端连接,然后继续代码,但任何有助于解决此问题的解决方案?有关套接字,请参阅msdn示例。代码使用套接字,但您可以对继承套接字类的任何类使用vbsititue,如tclistener classYes,它将在那里暂停,但暂停后
客户端将有一个对新创建的类的引用。同样,我不确定您如何使用
客户端
。它可能会给你带来问题,也可能不会;取决于用法。如果您在其他任何地方都不需要它,则将
client
设置为局部变量。现在它是一个类级变量,因此没有意义。