私はシンプルなマルチスレッドのC#サーバーとクライアントを持っています。ただ1つのクライアントが接続されていれば、それと対話できますが、2つ以上が接続されている場合は、最後のNetworkStream
を使用しているようです。私ができるようにしたいのは、読み書きするストリームを指定する入力コマンドを与えることです。したがって、たとえば、最初のクライアントは「クライアント1」であり、2番目のクライアントは「クライアント2」です。私はちょうど私のコマンドのテキストボックスに "クライアント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) { }
}
どうすればいいですか?
コードには多くの問題があります。あなたは 'using'ブロックを使用しておらず、例外を無視しています。 –
おそらくそれは概念コードの証明です。あなたは彼が本で行っていない100の事を見つけることができます、それは彼の質問に答えることはありません。 –