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

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.011 c
1-48491
ЮРИЙ_К
2003-09-03 12:06
2003.09.15
Как привязаться к относительным координатам ветки дерева TreeView


1-48645
Skif
2003-09-03 05:19
2003.09.15
Пробег по компонентам


14-48790
Rauf
2003-08-26 03:23
2003.09.15
Помогите, где скачать исходники Quake3 Arena???


1-48599
StrinGrid
2003-09-03 16:36
2003.09.15
Программно выделим ячейку


14-48754
Timur
2003-08-26 19:04
2003.09.15
Где скачать stylexp





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