Форум: "Сети";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
ВнизОбмен данными по локальной сети Найти похожие ветки
← →
Sheng (2003-06-19 11:44) [0]Привет всем! Такой вопрос уже много раз обсуждался, но я не нашел подходящего мне ответа.
Мне нужно обмениваться данными либо файлами между несколькими приложениями, причём данные могут быть от 120 байт до 200 метров и более (ну, более - маловероятно, но 200 - точно). Причём нужно как-то показывать процесс передачи (ПрогрессБар, например). Вот.
Как сие можно реализовать на Делфи?
← →
Digitman (2003-06-19 12:00) [1]см. TClientSocket, TServerSocket для TCP-транспорта
см. NamedPipes- и MailSlot- спецификации для NetBIOS-транспорта
p.s.
> данными либо файлами
Надо понимать, по твоему файлы не являются данными ? Т.е. либо "данные" либо "файлы" ? Мухи - отдельно, котлеты - отдельно ?
← →
Sheng (2003-06-19 12:09) [2]
> > данными либо файлами
Да это я так сказал... для общности.
Данные желательно передавать по TCP/IP.
На счет TClientSocket, TServerSocket: как там передать данные большого (>200 метров) размера. Если потоком - то нельзя, пишет памяти мало. По другому - я не знаю.
Если не затруднит, то на примере. На примере понятнее.
← →
Sheng (2003-06-19 12:11) [3]А то можно на вопрос "Как написать программу ..." ответить:
см. Delphi, C++
← →
Digitman (2003-06-19 12:22) [4]
> Если потоком - то нельзя, пишет памяти мало
А кто тебя заставляет использовать обязательно TMemoryStream ?
Открой файл для чтения объектом класса TFileStream и передавай его (файловый поток) на здоровье методом CustomWinSocket.SendStream() !
Метод SendStream() будет считывать файл, ассоциированный с TFileStream, в один и тот же фиксированный по размеру буфер памяти поблочно (по 4k за один прием) и точно так же поблочно отправлять.
← →
Sheng (2003-06-19 12:48) [5]TFileStream - это конечно хорошо, но я вот и писал - данные либо файлы. Если файлы - то да, всё ок, хотя ещё не все и там ясно. А если не файл, а данные, которые вычисляются программой (например, из большой таблицы выбирается много строк, они преобразовываются и отправляются). Конечно, можно их сохранить в файл и затем отправить. Но это как-то не так.
И ещё вопрос по TClientSocket:
ServerSocket1.Socket.SendStream(); - пересылает поток.
А как его принять? (я с сетями ещё только начинаю работать, почти ничего не знаю)
← →
Sheng (2003-06-19 13:02) [6]Хотя можно использовать TFileStream. Остаются вопросы:
ServerSocket1.Socket.SendStream(); - пересылает поток.
Как его принять?
И как вывести индикатор прогресса передачи файла?
← →
Digitman (2003-06-19 13:32) [7]
> ServerSocket1.Socket.SendStream(); - пересылает поток
это неверно, потому что send/receive-методы на серверной стороне допустимо вызывать только для тех объектов, которые фигурируют в списке ServerSocket1.Socket.Connections[], т.е. только для объектов класса TServerClientWinSocket, но никак не для TServerWinSocket.
> как вывести индикатор прогресса передачи файла?
используй событие OnClientWrite().
в этом событии ты можешь обратиться к свойствам TFilestream.Position и TFilestream.Size.
← →
Sheng (2003-06-19 13:35) [8]Второй вопрос решён. А первый?? Теперь вообще непонятно, как пересылать поток.
← →
Sheng (2003-06-19 14:32) [9]Так как правильно передать большой поток данных по сети?
← →
Digitman (2003-06-19 14:41) [10]На стороне приемника в событии OnRead() выполняй Socket.ReceiveBuf()
← →
Sheng (2003-06-19 15:09) [11]Всё равно не понятно.
Может кто сталкивался с этим или у кого есть пример процедуры Сервера и процедуры Клиента по передаче/приёму данных большого размера по сети?
← →
Sheng (2003-06-19 15:12) [12]Например, как сделано копирование файлов по сети в WindowsCommander"e или в Far"e.
← →
Digitman (2003-06-19 15:21) [13]Что непонятно ? Конкретно ?
← →
Sheng (2003-06-19 15:58) [14]Да тут всё, как говорится, намёками да намёками. Мне понятнее было бы на конкретных работающих примерах.
← →
Anatoly Podgoretsky (2003-06-19 16:09) [15]Должны быть (очень) конкретные вопросы.
← →
Digitman (2003-06-19 16:43) [16]
> Sheng
Какие еще "намеки" ?
Что тебе кажется "намеком" в Digitman © (19.06.03 14:41) ?
Прямая рекомендация - для приема очередного блока данных использовать метод ReceiveBuf() в событии OnRead()
← →
Palladin (2003-06-20 14:55) [17]программу ему надо... последовательность... что сделать, вот что ему надо...
сам он последовательность действий построить к сожалению не может...
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2003.08.28;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.006 c