Problem z połączeniem TCP

0

Witam

Piszę sobie program, który przy specyficznych warunkach musi nawiązać połączenie TCP z serwerem i wysłać odpowiedni komunikat. Moja metoda nawiązująca połączenie wygląda tak:

private void Connect()
{
try
{
clientTCP = new TcpClient();
clientTCP.Connect(serwerAdres, serwerPort);

            Thread.Sleep(300);              

            ns = socket.GetStream();
            
            
        }
        catch (Exception ex)
        {
            if (socket.Connected)
            {
                ns = socket.GetStream();
            }
             
        }
    }

Oprócz tego mam metodę, która jest wywoływana przez Timer'a i jej zadaniem jest wysłanie komunikatu do serwera:

private void WyslijKomunikat(object source, ElapsedEventArgs e)
{
try
{
if (!komunikat.Equals(""))
{
if (clientTCP!= null)
{
if (socket.Connected && !wyslanoPakiet)
{
WriteData(komunikat);//metoda wysyłająca dane
}

                        if (!clientTCP.Connected && !otrzymanoPotwierdzenie)
                        {
                            wyslanoKomunikat = false;
                            
                            Connect();
                            WaitForData();
                            WriteData(komunikat);
                        }
                    }
                    else
                    {
                        Connect();
                        WaitForData();
                        WriteData(pakiet);                            
                    }
                }
            }
        }
        catch (Exception e1)
        {
            Connect();
            WaitForData();
            WriteData(pakiet);
        }
    }

I jeszcze metoda oczekująca na dane:

private void WaitForData()
{
try
{
if (clientTCP!= null && clientTCP.Connected)
{
ns.BeginRead(buffer, 0, buffer.Length, new AsyncCallback(OnDataReceived), null);
}
}
catch (Exception ex)
{

        }
    }

I funkcja odbierająca dane:

private void OnDataReceived(IAsyncResult asyn)
{
try
{
int iRx = 0;

            iRx = ns.EndRead(asyn);
                            
            odebraneDane += Encoding.ASCII.GetString(buffer, 0, iRx);
            
            if(odebraneDane.Contains("Potwierdzenie"))
            {
                otrzymanoPotwierdzenie = true;

                komunikat = "";
                odebraneDane = "";

                Disconnect();
            }

            WaitForData();
        }
        catch (Exception ex)
        {
                            
        }
    }

Czyli nic nadzwyczajnego. W Connect() pomiędzy linią nawiązania połączenia a pobraniem strumienia I/O wstawiłem sobie Sleep'a ponieważ serwer, do którego się łączę działa w taki sposób, że przyjmuje każde połączenie, ale jeżeli nie ma wolnego łącza które by obsłużyło klienta to wtedy rozłącza gniazdo. Problem w tym, że w takiej sytuacji, kiedy połączenie zostało nawiązane a następnie od razu rozłączone to na komputerze klienta zużycie procesora wynosi 100% :( Jest to niepokojący objaw i nie wiem jak rozwiązać ten problem. Proszę o pomoc.

0

linie kodu pisałem z palca więc wkradł się błąd.
Tzn.
'komunikat' to to samo co 'pakiet', a 'clientTCP' to to samo co 'socket'.

Przepraszam za te błędy.

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