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

Вниз

Обмен данными по локальной сети   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.013 c
14-92208
IceDog
2003-08-10 14:35
2003.08.28
Поздравляю


8-92131
Real
2003-05-02 19:13
2003.08.28
Как динамически подключить курсор из обычного CUR-файла?


3-92075
IBSN
2003-07-30 18:54
2003.08.28
Графический редактор + MySql


9-91972
Призрак_Коммунизма
2003-02-24 13:25
2003.08.28
Команда по созданию игры. Совет.


4-92314
KocTeT
2003-06-28 17:41
2003.08.28
OpenDialog на WinAPI (не работает MULTISELECT)