У меня есть простой многопоточный сервер C # и клиент.Когда подключен только один клиент, я могу нормально с ним взаимодействовать, но когда два или более подключены, кажется, что я использую последний NetworkStream
.То, что я хотел бы сделать, это дать команду ввода, которая определяет поток для чтения и записи.Так, например, первый клиент - «Клиент 1», а второй клиент - «Клиент 2».Я просто набрал бы «Клиент 2» в своем командном текстовом поле, и он получит поток для второго клиента.
Проблема в том, что я не знаю, как назначить текст клиентам.Вот соответствующий код с сервера:
private void ClientThread(Object client)
{
NetworkStream networkStream = ((TcpClient)client).GetStream();
Dictionary<int, NetworkStream> myClients = new Dictionary<int, NetworkStream>(); // This didn't work.
myClients.Add(counter, ((TcpClient)client).GetStream()); // Wouldn't write.
counter = counter + 1;
streamReader = new StreamReader(networkStream);
streamWriter = new StreamWriter(networkStream);
strInput = new StringBuilder();
while (true)
{
try
{
strInput.Append(streamReader.ReadLine());
strInput.Append("\r\n");
}
catch (Exception error)
{
break;
}
Application.DoEvents();
DisplayMessage(strInput.ToString());
strInput.Remove(0, strInput.Length);
}
}
private void textBox2_KeyDown(object sender, KeyEventArgs e)
{
try
{
if (e.KeyCode == Keys.Enter)
{
//ListView.SelectedListViewItemCollection stuff = listView1.SelectedItems;
//ip is displayed in listView1, if I could also bind the stream for the ip
//to it and select it, that would be cool.
{
strInput.Append(textBox2.Text.ToString());
streamWriter.WriteLine(strInput);
streamWriter.Flush();
strInput.Remove(0, strInput.Length);
if (textBox2.Text == "cls") textBox1.Text = "";
textBox2.Text = "";
}
}
}
catch (Exception error) { }
}
Итак, как я могу это сделать?