Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 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
3-92066
Berezne
2003-08-02 00:30
2003.08.28
Вопрос по DBCombobox????


3-91984
Тщищвн
2003-08-01 09:42
2003.08.28
Вычисляемые поля в запросе на FB?


6-92161
Иосиф Сталин
2003-06-24 03:49
2003.08.28
как заполнить поля на страничке


3-91998
boka
2003-08-06 08:24
2003.08.28
При организации доступа к Ecxel файлу через ODBC возникла проблем


11-92090
nsvi
2002-12-19 14:43
2003.08.28
Возникла проблема. Не могу вызвать вторую - модальную форму.





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