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.