Napisałem aplikację która jest serwerem opartym o IDTcpServer (Indy10). Oraz aplikacje klienta działającą w oparciu o IDTcpClient.
Działania polega na tym że klient łączy się do serwera i przesyła do niego komunikat, a następnie serwer odpowiada na ten komunikat:
Zdarzenie onExecute dla IDTcpServer wygląda w skrócie następująco:
line:= AContext.Connection.IOHandler.ReadLn;
AContext.Connection.IOHandler.WriteLn('DATA'+IntToStr(wartosc));
Po przesłaniu odpowiedzi do klienta serwer zapisuje do bazy danych wartości które wysłał i które otrzymał (dbExpress):
SQLdataSet.CommandText := 'INSERT INTO log (klient,data,start,offset) VALUES (:klient,:data,:star,:off);';
DM.SQLdataSet.ParamByName('klient').AsString := copy(line, 4, 1);
DM.SQLdataSet.ParamByName('data').AsString := FormatDateTime('yyyy-mm-dd hh:nn:ss', Now);
DM.SQLdataSet.ParamByName('star').AsString := lancuch;
DM.SQLdataSet.ParamByName('off').AsString := Edit1.text;
DM.SQLdataSet.ExecSQL();
Aplikacja działa poprawnie jeśli jest podłączony jeden client do serwera. Natomiast kiedy włączam drugiego clienta i łączy się z serwerem, na serwerze pojawia się komunikat:
"Database Server Error: Lost connection to MYSQL server during query"
"Database Server Error: MYSQL server has gone away"
Jak to naprawić?