Problem z połączeniem między kompami: IndyTCP

0

Cześć.

Mam 2 kompy. Na jednym z nich(serwer) jest uruchomiony w tle mały programik(nazwijmy go ORG).

I teraz tak.
Podczas uruchamiania aplikacji jakiejś tam u klienta, wysyła ona do ORG pewne dane. ORG odbiera je i robi z nimi odpowiednie rzeczy.

Problem pojawia się w momencie, gdy połączenie między kompami jest tracone(np. wyjęcie kabla sieciowego :))

ORG odłącza automatycznie klienta po krótkiej chwili, no i to jest niby ok.
Ale gdy połączenie jest znów odzyskane, wtedy znowu próbuję połączyć się z ORG. Jednak dostaję komunikat "Connection reset by peer". O co chodzi?

Oto kod, którym łączę się z ORG i wysyłam mu informacje o tym, że kolejny klient się podłączył:

var
  adbName, adbUser, adbPass: string; //przechowuje różne info
begin
  try
    if not MainForm.TCPClient.Connected then  //jeśli nie jesteś połączony, to połącz
    begin
      MainForm.TCPClient.Host:=ReadSettings(ORG_IP);
      if trim(MainForm.TCPClient.Host)<>'' then
      begin
        MainForm.TCPClient.Port:=StrToInt(ReadSettings(ORG_PORT));
        MainForm.TCPClient.Connect;
      end else
        application.MessageBox('Nie można było się połączyć z Opos Replication Guard! Nie wpisano adresu IP serwera', PChar(tyt), mb_OK+mb_IconExclamation);
    end;
    
//gdy jesteś połączony, to wyślij informacje
    if MainForm.TCPClient.Connected then
    begin
      GetAlertDBInfo(adbUser, adbPass, adbName, false);
      MainForm.TCPClient.Socket.WriteLn(CreateCommand(ALERT_DB_ADDRESS, adbName));
      MainForm.TCPClient.Socket.WriteLn(CreateCommand(ALERT_DB_USER, adbUser));
      MainForm.TCPClient.Socket.WriteLn(CreateCommand(ALERT_DB_PASS, adbPass));
    end;
  except
    on E: Exception do
      application.MessageBox(PChar('Nie można było połączyć się z '+
                             'Opos Replication Guard! Błąd: '+e.Message), PChar(tyt),
                             mb_OK+mb_IconStop);
  end;

Funkcja CreateCommand po prostu zwraca odpowiednio stworzonego stringa, żeby ORG mógł sobie wyczytać w łatwy sposób informacje i odpowiednio na nie zareagować.

Początek powyższej procedury próbowałem też tak:

if MainForm.TCPClient.Connected then MainForm.TCPClient.Disconnect;

Wtedy niby działało. Ale w momencie wysłania jakiejś informacji do ORG on rozłączał klienta z jakiegoś powodu.

0

Co to Indy? D:D

Zainteresuj się ICS lub Synapse.

0
Nex napisał(a)

Co to Indy? D:D

??

Zainteresuj się ICS lub Synapse.

Nie za bardzo chce mi się zmieniać jeden cały program i pół drugiego :/

0
Juhas napisał(a)

Nie za bardzo chce mi się zmieniać jeden cały program i pół drugiego :/

Czasami po prostu warto. ;)

0
Nex napisał(a)
Juhas napisał(a)

Nie za bardzo chce mi się zmieniać jeden cały program i pół drugiego :/

Czasami po prostu warto. ;)

Gdybym chciał, to bym się zapytał: "Jakiego użyć komponentu ZAMIAST". A ja się pytam, jak to poprawić.
Aplikacja jest naprawdę duża i nie warto zmieniać w niej połowy kodu :/

0

Co do problemu, Indy ma to do siebie że takie coś wyświetla... Kiedy kiedyś zainstalowałem THGG (oparte na Indy 9) to po zerwaniu połączenia z internetem i wznowieniu go pojawiał się identyczny błąd. Wydaje mi się że to wina Indy a nie błąd w Twoim kodzie.

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