Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.10;
Скачать: CL | DM;

Вниз

Что-то я совсем запутался... чем может быть не надежн этот   Найти похожие ветки 

 
Программер_   (2004-09-22 11:45) [0]

способ отправки данных через компоненты TServerSocket &TClientSocket

var
 Delitel:String=#10#13;
 Buffer:String;
....

Function ReadLnBuffer(Buffer:Pointer):String;
var
P:integer;
begin
 Result:="";
 P:=Pos(Delitel,String(Buffer^));
 If p=0 then exit; //Ждем следующего пакета
 Result:=Copy(String(Buffer^),1,P-1);
 Delete(String(Buffer^),1,p+1);
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
s:String;
begin
 Buffer:=Buffer+Socket.ReceiveText;
 S:=ReadLnBuffer(@Buffer);
   While S<>"" do
     begin
       Memo1.Lines.Add(S);
       S:=ReadLnBuffer(@Buffer);
     end;
end;


 
VMcL ©   (2004-09-22 11:50) [1]

Что курим?


 
Программер_   (2004-09-22 11:59) [2]

VMcL ©   (22.09.04 11:50) [1]
Нужно плучать данные (Простые Строки) с учетом фрагментации


 
VMcL ©   (2004-09-22 12:11) [3]

>>Программер_  (22.09.04 11:59) [2]

Раз нужно, получай. Я ничего против не имею. Вопрос в чём?


 
VID ©   (2004-09-22 12:16) [4]

НА http://delphibase.endimus.ru есть решения этой проблемы


 
Программер_   (2004-09-22 12:22) [5]

Я там был уже, вот там довольно сложные варианты ,
меня интересует что может быть ненадежно если между строками просто ставить разделитель типа #10#13 , для чего нужно что более сложное или я еще не в курсе чего-то?,
Конкрето чем лучше релизация на http://delphibase.endimus.ru ?


 
Digitman ©   (2004-09-22 12:57) [6]


> String(Buffer^));
...
> S:=ReadLnBuffer(@Buffer);


и зачем эти выкрутасы с нетипиз.указателями, косвенной адресацией и разыменованиями ?

разве нельзя объявить передаваемый параметр просто как var Buf: String ?

и вот еще  - а если передается "пустая строка" ? По твоей логике если ф-ция ReadLnBuffer() вернула "", это означает что в буфере нет "целиком" доставленной строки, но это же неверно ! "Пустая" строка тоже имеет право на существование !


 
Программер_   (2004-09-22 13:28) [7]

Исправился ,
Вместо
  While S<>"" do...
        While Length(S)>0 do...

все или еще есть замечания по коду?


 
Digitman ©   (2004-09-22 13:48) [8]

код дерьмовый в принципе

бесконечные перераспределения памяти при работе строковых ф-ций

вариант передачи/приема перед каждой строкой ее длину, может, и будет чуть посложнее, зато позволит минимизировать операции с памятью



Страницы: 1 вся ветка

Текущий архив: 2004.10.10;
Скачать: CL | DM;

Наверх




Память: 0.46 MB
Время: 0.029 c
3-1095238218
Medik
2004-09-15 12:50
2004.10.10
INNER JOIN, OUTER JOIN


3-1094800361
KapitanSerg
2004-09-10 11:12
2004.10.10
Записть файлов *.jpg в БД


1-1095846555
Profi
2004-09-22 13:49
2004.10.10
Как избежать зависания?


6-1091435529
Alex_2004
2004-08-02 12:32
2004.10.10
Сетевое имя компьютера


1-1095742277
Gero
2004-09-21 08:51
2004.10.10
Рисование на рамке закладки TTabControl





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский