•  

ГлавнаяIndyЧастые вопросы по Indy → Проблема с использованием компонента IdMappedPortTCP

Создано: 24.05.2014 23:22:39 · Исправлено: 24.05.2014 23:22:39 · Прочтений: 691

Здравствуйте!
Помогите решить проблему!
Проблема с использованием компонента IdMappedPortTCP (Indy 10)
Удаленный прокси сервер требует пароль. Решил проблему так:

procedure TForm2. IdMappedPortTCP1Execute(AContext: TIdContext);
var
  i:Integer;
  Context:TIdMappedPortContext;
begin
  Context:=TIdMappedPortContext(AContext);
           Context.NetData:=ReplaceSub(Context.NetData,Referer: http://127.0.0.1/,Referer: http://+inttostr(ServerPort)+/);
           Context.NetData:=ReplaceSub(Context.NetData,Host: 127.0.0.1,Host: +ServerIp);
  if PosStr(crd,TIdMappedPortContext(Context).NetData)=0 then
    Context.NetData:=StringReplace(Context.NetData,#$D#$A#$D#$A,#$D#$AProxy-Authorization: Basic +crd+#$D#$A#$D#$A,[]);
// здесь crd- логин:пароль в Base64
end;


Все нормально.
Но если из браузера POST том отправляется большой пакет, (письмо с вложением больше 200 кб) то программа его не до конца отправляет. При том, каждый раз по разному. Т.е, один раз отправляется где-то 300 кб, другой раз где-то 200 кб.... и останавливается.
Гугл не помог. в сайте не нашел....
Помогите. Может, все просто, но я недопер... Уже в тупике... в луже сижу.
Существует максимальный размер кадра, который на многих компьютерах равен 8Кб. В Вашем случае сеть может быть свободна или занята - в зависимости от этого можно отправить большой массив или же отправление маленького вызовет трудности. Также большую роль играет хорошая или плохая связь. В любом случае лучше разбивать большие массивы на несколько подмассивов и передавать порциями, через определенные интервалы времени.
Но КАК разбить пакет в этом случаи? Может в indy есть какой нибуть способ это делать?
Или мне придется отказатся от IdMAppedPotrTCP ? Но это не желательно. Так как вся логика проги на нем.

А еще, Когда попробовал использовать удаленный прокси без авторизации (то есть Удаленный прокси не требует пароль) и без добавления заголовка авторизации

Context.NetData:=StringReplace(Context.NetData,#$D#$A#$D#$A,#$D#$AProxy-Authorization: Basic +crd+#$D#$A#$D#$A,[]) 

то все нормально. Так что, я еще в луже. :(
Все. Проблема решена.

Context.NetData:=StringReplace(Context.NetData,#$D#$A#$D#$A,#$D#$AProxy-Authorization: Basic +crd+#$D#$A#$D#$A,[])
Добавил строку авторизации ВЕЗДЕ. А надо было добавить только после первого.