Problem z klasą TcpClient

0

Witam

W swoim programie używam między innymi klasę TcpClient, która jak nazwa wskazuje służy mi do nawiązywania i obsługi połączenia TCP dla klienta. Wszystko fajnie i prosto, ale w pewnym momencie sprawdzam sobie:

if ( tcpKlient.Connected )
{
....
}

i tutaj wychodzi problem, ponieważ sytuacja jest taka:
nawiązuję połączenie, wysyłam dane, a serwer zrywa połączenie. W takiej sytuacji chciałbym na nowo nawiązać połączenie i dla tego sprawdzam sobie właściwość Connected. Problem w tym, że po zerwaniu połączenia przez serwer właściwość Connected jest ustawiona na 'true' i to przez bardzo długi czas. A co za tym idzie nie mogę stwierdzić jaki jest prawdziwy stan połączenia i odpowiednio zareagować. Jeżeli ktoś ma jakieś pomysły to proszę o poradę.

0

Ogólnie bajer jest taki że atrybut Connected przechowuje informacje o stanie połączeniu który był przy ostatniej operacji I/O. W takim razie jeśli wpierw wysyłasz dane, potem połączenie jest zrywane, a Ty potem nie wysyłasz żadnych danych to Connected będzie wciąż przyjmować wartość TRUE.

Jedyny pomysł jaki mam na rozwiązanie tego to, wysyłanie małego pakietu przed sprawdzaniem stanu connected. W pseudokodzie to wyglądało by mniejwiecej tak:

bool IsConnected()
{
wyslij_prosty pakiet;
if(socket.Connected())
{
return true;
}
return false;
}

Pozdrawiam ;)

0

Sprawdziłem i teoria, że Connected przechowuje wartość dla ostatniej operacji IO, jest niestety nieprawdziwa. Próbowałem wysyłać jakieś dane i mimo wszystko Connected po tej operacji nadal był nieprawidłowy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1