У меня есть следующий исходный код с сайта MS: http://msdn.microsoft.com/en-us/library/fx6588te.aspx
Я пытаюсь определить, когда клиент закрыл соединение.
Один из способов, которым я пытался, - это отправлять данные клиенту до тех пор, пока я не получу исключение. Я создал новый поток, который выполняется один раз в onDataReceive, но я получаю сообщение об ошибке «Не удается получить доступ к удаленному объекту»:
m_workerSocket[socket_id].Send(bytes);
но если я вставлю его непосредственно в onDataReceive, он будет работать нормально. Почему я получаю это исключение при попытке получить доступ к сокету из другого потока?
Тогда я нашел второе решение:
static class SocketExtensions
{
public static bool IsConnected(this Socket socket)
{
try
{
return !(socket.Poll(1, SelectMode.SelectRead) && socket.Available == 0);
}
catch (SocketException) { return false; }
}
}
Который я тоже хотел запустить в отдельном потоке, чтобы проверять всякий раз, когда сокет закрывается, но я получаю ту же ошибку. Я получаю ошибку только в том случае, если я пытаюсь сделать это из потока, если я помещаю оба решения в одну из функций, они выполняются нормально. Любые идеи, как запустить это из потока?