Главная страница
    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.05 c
1-1096009386
NewDelpher
2004-09-24 11:03
2004.10.10
проблемы с AV при вызове Procedure Of Object


1-1096012511
Pine
2004-09-24 11:55
2004.10.10
Как построить в D7 исполняемый файл с BDE 5.01?


1-1096008720
RoLeX2004
2004-09-24 10:52
2004.10.10
Как проверить соответствует ли имя файла заданной маске?


1-1096012898
AndrewH
2004-09-24 12:01
2004.10.10
Компонент для Crystal Reports 10


1-1095660056
П7
2004-09-20 10:00
2004.10.10
TTreeNode.Data - как правильно использовать?





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