TCP problem z rozłączniem

0

Witam

napisałem aplikacje serwera i aplikacje klienta i mam taki problem że rozłączając klienta serwer nadal widzi połączenie i jest zapętlony w Receive()

kombinowałem z ReceiveTimeOut() ale ono dziwnie sie zachowuje :( no i musze co jakiś czas wysyłać coś do serwera od klienta żeby mi utrzymywał połączenie .

może znacie jakieś ciekawe rozwiązania dla komunikacji TCP CLient Server ? jakieś biblioteki przykłady ?

z góry dziękuję za pomoc

pozdrawiam
Andrzej

0

Pokaż kod, bo normalnie read zwraca -1 po rozłączeniu socketa.

0

Witam

tak wyglada kawalek kodu serwera

 
private void slave(Object client)
        {
            TcpClient tcpClient = (TcpClient)client;
            ASCIIEncoding encoder = new ASCIIEncoding();
            try
            {
                Byte[] message = encoder.GetBytes("OK");
                tcpClient.Client.Send(message);
            }
            catch { }

            while (server)
            {
                try
                {
                    #region ODBIOR WIADOMOSCI
                    bytes = 0;
                    try
                    {
                        bytes = tcpClient.Client.Receive(message1);
                    }
                    catch { break; }
                    if (bytes == 0) break;
                    read = encoder.GetString(message1, 0, bytes);
                    string[] reads = read.Split(new char[] { ';' });
0
if (bytes == 0) break;

zmień na

if (bytes <= 0) break;
0

Nie pomogło :(

0
catch { }

Pokémon!

Pokaż jak rozłączasz klienta.

0

Wstyd sie przyznac ale blad byl w innej petli , przed Client.Send byla inna petla

czy sprawdzenie czy polaczenie jest nadal aktywne jest prawidlowe ?

 
while (lastsend == send && tcpClient.Client.Poll(0, SelectMode.SelectRead))
                            {
                                info_slave(read, ref send);
                                Thread.Sleep(100);
                            }

Client.Client.Poll(0, SelectMode.SelectRead))

pozdrawiam

0

Mam jescze jedno pytanie ktory sposob jest lepszy i bardziej prawidlowy :)

 tcpClient.Client.Receive(message);
 clientStream.Read(message, 0, 4096);
0

Ojej kolego nie czepiajmy się :)
Zależy mi na stabilności i prędkości wymienianych informacji stąd moje pytanie z którego sposobu będzie lepiej skorzystać ?

pozdrawiam
Andrzej

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