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

Вниз

Как лучше всего передавать информацию через сокеты ?   Найти похожие ветки 

 
Delpher_Gray ©   (2003-07-14 13:14) [0]

Всем доброго времени суток !
Подскажите плиз как лучше всего передаватинформацию через сокеты ??
Я пишу что-то вроде системы удалённого доступа к файлам компа, типа FTP...
Так вот я получаю список файлов какой либо директории путём FinFirst (*.*), потом передаю через TServerSocket путём SendText строку "f1000", что значет что щас прийдётт список файлов, размером 1000 байт...
Клиент переводится в режим ожидания сиска...
Потом до тех пор пока не принялось 1000 байт, записывает всё в строку, что-то типа: "file.exe|1379|03.10.1988|#"file.exe|1379|03.10.1988|#".
| - разделитель в каждом файле
# - разделитель между файлами
Потом клиент разделяет принятую строку и записывает всё в TListView...

Вот такой тупой алгоритм придумал я, но с ним бывают глюки... Подскажите как можно более НАДЁЖНО предать информацию через сокеты...

Заранее благодарен !


 
Delpher_Gray ©   (2003-07-14 13:16) [1]

Извените за такие словеячки как "щас", "чё-та", просто привык в чате так общаться :)
Чтоб никто ничего левого не подумал :)


 
Карелин Артем ©   (2003-07-14 13:20) [2]

Передавай по FTP. Не изобретай велосипед, бери готовый.


 
Delpher_Gray ©   (2003-07-14 13:24) [3]

Метод через FTP - отподает !! Нужно именно так как я написал ! В этом и вся проблема !!


 
Digitman ©   (2003-07-14 13:24) [4]


> просто привык в чате так общаться


отвыкай.


> с ним бывают глюки


гадать будем какие ?


 
Delpher_Gray ©   (2003-07-14 13:29) [5]

2Digitman:
Иногда не всё передастся, иногда выведится не правильно, но и т.д..........


 
Digitman ©   (2003-07-14 13:33) [6]


> Иногда не всё передастся, иногда выведится не правильно


ну и как тебе подсказать ? если код не приводишь ?


 
Delpher_Gray ©   (2003-07-14 13:38) [7]

Код на приём списка (если клиент в режиме приёма файла):

procedure GetFilesList(List: string);
var
FileType: string;
FileStr: string;
begin
StrDate := StrDate + List;

if Length(StrDate) >= Size then
begin
MainForm.Status.SimpleText := "Выводим список файлов...";
while Pos("#", StrDate) <> 0 do
begin
FileStr := Copy(StrDate, 1, Pos("#", StrDate) -1);
MainForm.LvFilesList.Items.Add.Caption := Copy(StrDate, 1, Pos("|", StrDate) -1);
Delete(StrDate, 1, Pos("|", StrDate));
FileType := Copy(StrDate, 1, Pos("|", StrDate) -1);
Delete(StrDate, 1, Pos("|", StrDate));
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].SubItems.Add(Copy(StrDate, 1, Pos("|", StrDate) -1));
Delete(StrDate, 1, Pos("|", StrDate));
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].SubItems.Add(Copy(StrDate, 1, Pos("|", StrDate) -1));

if FileType = "Directory" then
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].ImageIndex := 0
else
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].ImageIndex := 1;

( StrDate, 1, Pos("#", StrDate)
Код на приём списка (если клиент в режиме приёма файла):

procedure GetFilesList(List: string);
var
FileType: string;
FileStr: string;
begin
StrDate := StrDate + List;

if Length(StrDate) >= Size then
begin
MainForm.Status.SimpleText := "Выводим список файлов...";
while Pos("#", StrDate) <> 0 do
begin
FileStr := Copy(StrDate, 1, Pos("#", StrDate) -1);
MainForm.LvFilesList.Items.Add.Caption := Copy(StrDate, 1, Pos("|", StrDate) -1);
Delete(StrDate, 1, Pos("|", StrDate));
FileType := Copy(StrDate, 1, Pos("|", StrDate) -1);
Delete(StrDate, 1, Pos("|", StrDate));
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].SubItems.Add(Copy(StrDate, 1, Pos("|", StrDate) -1));
Delete(StrDate, 1, Pos("|", StrDate));
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].SubItems.Add(Copy(StrDate, 1, Pos("|", StrDate) -1));

if FileType = "Directory" then
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].ImageIndex := 0
else
MainForm.LvFilesList.Items[MainForm.LvFilesList.Items.Count -1].ImageIndex := 1;

Delete(StrDate, 1, Pos("#", StrDate));
end;
MainForm.Status.SimpleText := "Список файлов получен и выведен";

Receive := false;
ReceiveType := "";
end;
end;CODE>

Принемает строки типа: "file.exe"file"1379"03.10.1988".


 
Delpher_Gray ©   (2003-07-14 13:42) [8]

А вообще такой метод, через который я передаю и принемаю можно использовать ?? ИЛи есть ещё какие-нить методы кроме передачи строк ?


 
Digitman ©   (2003-07-14 13:42) [9]


> Код на приём


и где тут прием ? ни намека даже на гнездовые функции

к тому же на стороне передатчика, скорей всего, нет обработки OnWrite()


 
Delpher_Gray ©   (2003-07-14 13:44) [10]

Неа... Нету :(
А чё за OnWrite ??

На событие OnClientRead, TServerSocket"а если Receive = true тогда GetFilesList(Socket.ReceiveText).

Вот...
А Receive - режим принимающего !!!


 
Digitman ©   (2003-07-14 13:52) [11]


> чё за OnWrite


без обработки этого события в неблок.режиме ничего путного у тебя не получится.


 
Delpher_Gray ©   (2003-07-14 17:27) [12]

2Digitman:
А можешь подсказать пример использования OnWrite ??

Заранее благодарен !


 
Digitman ©   (2003-07-14 17:35) [13]


> можешь подсказать пример


не могу.
пример для каждого случая индивидуален.

а логика такова :

событие OnWrite() возникает как минимум 1 раз (сразу за событием OnConnect) и всякий раз после освобождения буфера передачи, если обращение к нему по записи дало отказ из-за занятости буфера.

обращение по записи - это методы-ФУНКЦИИ объекта TCustomWinSocket : SendBuf(), SendText(), SensStream().
См. описания результатов выполнения первых двух из упомянутых


 
Delpher_Gray ©   (2003-07-14 17:40) [14]

Угу ! Попробую чё-нить написать, не получется, тогда ещё чё-нить спрошу :)



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

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

Наверх




Память: 0.5 MB
Время: 0.035 c
3-48427
SiJack
2003-08-25 16:07
2003.09.15
Как сделать чтобы в DBGridEh при нажатии кнопки


3-48431
den74
2003-08-25 14:31
2003.09.15
Как добавить поле в базу данных


1-48631
graphmail
2003-09-03 10:09
2003.09.15
Delphi+Excel


14-48736
AlexRya
2003-08-26 22:43
2003.09.15
В Mozilla сайт не отображается


1-48524
Марат
2003-09-04 14:49
2003.09.15
Формы