Итак, я попытался получить все данные от каждого отдельного клиента, но по какой-то причине он хочет получать данные только от одного клиента (произвольно) и не хочет получать данные от другого клиента, так что я делаю неправильно?
Код, в котором фоновый работник регистрирует каждого клиента для своего нового фонового сотрудника:
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;
}