저는 간단한 멀티 스레드 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) { }
}
어떻게 할 수 있습니까?
코드에 많은 문제가 있습니다. 당신은'using' 블록을 사용하지 않고 예외를 무시하고 있습니다. –
아마도 개념 코드의 증거 일 수 있습니다. 책에서하지 않는 100 가지를 찾을 수 있습니다. 질문에 대답하지 않습니다. –