Главная страница
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.48 MB
Время: 0.028 c
14-1095763884
Rule
2004-09-21 14:51
2004.10.10
Вот это рынок труда в Москве.


14-1095843783
miwa
2004-09-22 13:03
2004.10.10
Подскажите, что это за песня? Лет пять назад, вроде, была


3-1095056516
Uran
2004-09-13 10:21
2004.10.10
Не идет выборка в EasyTable


1-1095844550
Игорь_
2004-09-22 13:15
2004.10.10
Компоненты формы


9-1086861113
Andr
2004-06-10 13:51
2004.10.10
Про нормали в OpenGL