Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2004.10.10;
Скачать: [xml.tar.bz2];

Вниз

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

 
Программер_   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.036 c
1-1096357704
Aser
2004-09-28 11:48
2004.10.10
Как совместить название элемента/переменной с другой переменной?


14-1095864160
gn
2004-09-22 18:42
2004.10.10
Мастера а кто какой программой пользуется


6-1091593309
Дмитрий Ботвин
2004-08-04 08:21
2004.10.10
Объём оперативной памяти


3-1094638324
Zif
2004-09-08 14:12
2004.10.10
Как посчитать количество всех строк...


1-1096248121
Ктото
2004-09-27 05:22
2004.10.10
Посоветуйте пожалуйста статью по созданию экспертов для





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский