TCP-клиент не получает данные от всех клиентов, но только один - PullRequest
0 голосов
/ 26 мая 2018

Итак, я попытался получить все данные от каждого отдельного клиента, но по какой-то причине он хочет получать данные только от одного клиента (произвольно) и не хочет получать данные от другого клиента, так что я делаю неправильно?

Код, в котором фоновый работник регистрирует каждого клиента для своего нового фонового сотрудника:

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;
    }
...