Всем доброго дня. Необходимо обмениватся данными с программой
Delta\Digitals по протоколу TCP\IP (динственно возможный способ). При этом столкнулся с рядом проблем, если кто знает подскажите пути их решения:
1) случается что программа передаёт большой объём данных за один раз, сейчас получаю их так:
Код HTML:
TNConnector = class(TIdTCPClient)
private
//Пытаемся получить ответ с сервера
function TrySend(Com: String):TStringStream;
public
constructor Create(ServerPort:Integer; AplSelf: TForm);
//Посылает команду серверу, ответ возвращает в виде потока
function SendRStream(Com: String):TStringStream;
End;
---------------------------------------------------------------
constructor TNConnector.Create(ServerPort:Integer; AplSelf: TForm);
VAR SerRec:String;
BEGIN
inherited Create(AplSelf);
Port := ServerPort;
Host := 'localhost';
Connect(15);
SerRec := CurrentReadBuffer;
ApplicationSelf := AplSelf;
ServerComPort := Port;
RecvBufferSize := 1024;
ReadTimeout := 30;
END;
//==============================================================================
//Посылает команду серверу, ответ возвращает в виде потока
function TNConnector.SendRStream(Com: String):TStringStream;
VAR TempReply:TStringStream;
TempCountTrySend:Integer;
BEGIN
TempCountTrySend := CountTrySend;
//Попытка отослать команду серверу
repeat
TempReply := TrySend(Com);
TempCountTrySend := TempCountTrySend - 1;
until ((TempCountTrySend = 0)or(TempReply<>nil));
Sleep(WaitReply);
SendRStream := TempReply;
END;
//==============================================================================
//Пытаемся получить ответ с сервера
function TNConnector.TrySend(Com: String): TStringStream;
VAR TempStream:TStringStream;
TempRec: String;
BEGIN
TRY
//Посылаем команду серверу
Write(Com);
TempStream := TStringStream.Create('');
repeat
TempRec := CurrentReadBuffer;
TempStream.WriteString(TempRec);
until Length(TempRec) <> 1024;
TempStream.Position := 0;
TrySend := TempStream;
EXCEPT
//Сервер занят, ни чего не возвращаем
TrySend := nil;
END;
END;
может кто-то подскажет идею получше.
2) Подскажите как можно передать большой объём данных серверу, приведённый выше пример этого не позволяет.
3) Если запрос к TCP\IP серверу приложения совпадает с выполнением им какого либо действия зависает и серверное приложение и клиентское пока не закроеш клиентское приложени. Как этого избежать.