TcpClient client = listener.AcceptTcpClient();
clients.Add(new TestClient(client));
Сервер тестирований на .Net
Код:
я его пытаюсь засунуть в ArrayList с объектами, которые представляют собой экземпляры классов работы с потоками и при этом еще и хранят этого самого клиента. Вот исходник этого класса:
Код:
class TestClient
{
private TcpClient client;
private Thread testClientThread;
public bool Connected
{
get
{
if (client.Client == null)
{
return false;
}
else
{
return client.Connected;
}
}
}
public TestClient(TcpClient client)
{
this.client = client;
testClientThread = new Thread(new ThreadStart(Work));
testClientThread.Priority = ThreadPriority.BelowNormal;
testClientThread.Start();
}
private void Work()
{
do
{
//Здесь будет некоторая работа с клиентом
if (!Connected)
MessageBox.Show("Клиент отключился!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
while (this.Connected);
MessageBox.Show("Завершение работы с клиентом", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
public void Stop()
{
client.Close();
}
{
private TcpClient client;
private Thread testClientThread;
public bool Connected
{
get
{
if (client.Client == null)
{
return false;
}
else
{
return client.Connected;
}
}
}
public TestClient(TcpClient client)
{
this.client = client;
testClientThread = new Thread(new ThreadStart(Work));
testClientThread.Priority = ThreadPriority.BelowNormal;
testClientThread.Start();
}
private void Work()
{
do
{
//Здесь будет некоторая работа с клиентом
if (!Connected)
MessageBox.Show("Клиент отключился!", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
while (this.Connected);
MessageBox.Show("Завершение работы с клиентом", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
public void Stop()
{
client.Close();
}
Подскажите, где моя ошибка. Когда я обращаюсь к clients.Connected после установки соединения значение свойства всегда true, даже если клиент уже отключился. Причем этот только один замеченный глюк.
Свойство Connected выводится исходя из последней операции обмена с сервером. В твоём коде последняя операция (т.е. подключение клиента к серверу) проходит успешно, поэтому до следующего обмена Connected остаётся со значением true, т.к. после соединения ты больше не пересылаешь данные.