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

Вниз

Передача файлов   Найти похожие ветки 

 
Krab12345   (2006-11-28 10:04) [0]

Как передать файлы между 2-мя локальными компьютерами на чистом API?


 
Сергей М. ©   (2006-11-28 10:13) [1]

Соответствующая шара на компьютере-приемника имеется ?


 
Krab12345   (2006-11-28 10:21) [2]

Нет, интересует обе стороны!


 
Сергей М. ©   (2006-11-28 10:23) [3]

Тебе придется писать две программы: программу-сервер для компьютера-приемника и программу-клиент для компьютера-источника.

Готов ?


 
Krab12345   (2006-11-28 10:32) [4]

А по-подробнее можно, может кто ссылку даст на какие-нить заготовки, а то в интернете по этому поводу только компоненты TClient(Server)Socket в основном обсуждаются


 
Big Joe_   (2006-11-28 10:35) [5]

А чем тебе TClient(Server)Socket  не угодил ? Зачем изобритать велосипед не пойму.


 
Сергей М. ©   (2006-11-28 10:38) [6]


> в интернете по этому поводу только компоненты TClient(Server)Socket
> в основном обсуждаются


Ну отчего же только они ?

Например, на этом сайте есть статья

http://www.delphimaster.ru/articles/named_pipes/index.html

иллюстрирующая организацию интерпроцессного взаимодействия с использованием альтернативной технологии - именованых программных каналов (NamedPipes)


 
Krab12345   (2006-11-28 10:41) [7]

спасибо, буду мучать


 
Сергей М. ©   (2006-11-28 10:51) [8]


> Krab12345


А почему бы на компе-приемнике не открыть шару ?
Задача же при этом упрощается до безобразия ..

Написание клиента при этом сводится к тривиальному вызову CopyFile(), а сервер писать не требуется - он уже работает на приемнике.


 
palva ©   (2006-11-28 11:00) [9]

1. На компьютере источнике запустить WebServer - Бывают очень маленькие типа http://www.ritlabs.com/en/products/tinyweb/  - 53 Кб
2. На компьютере приемнике обратиться к функции URLDownloadToFile из URLMon.tpu


 
Krab12345   (2006-11-28 11:14) [10]

народ - это курсач, поэтому надо писать


 
Сергей М. ©   (2006-11-28 11:25) [11]


> это курсач, поэтому надо писать


В задании на "курсач" прямо так и указано, что серверная сторона должна быть написана "с нуля" и использовать существующие серверы нельзя ?


 
ancara ©   (2006-11-28 11:47) [12]

А на чем акцент курсача стоит, на передаче данных по сети или именно на винапи?
 Если на винапи и сокетах, тогда действительно придется велосипед писать... Попробуй хотя бы пару байт между сокетами переслать, потом уж и файлы будешь толкать.
 Там все просто на самом деле:
 инициализируем винсок WSAStartup;
 создаем сокет sock := socket(... ... ...);
 биндим сокет на порт bind(sock, ...)
 ну и все, sendto отправляет recvfrom принимает


 
Krab12345   (2006-11-28 13:19) [13]

Курсач чисто завязан на АПИ.
Люди помогите со следующем:
Сделал я серверную часть, она сокет слушает.
Сделал клиентскую часть, коннект с сервером устанавливает.

Кто подскажет как перекинуть целиком файл, от клиента к серверу. Желательно с примерчиком.


 
Reindeer Moss Eater ©   (2006-11-28 13:23) [14]

windows.CopyFile


 
Anatoly Podgoretsky ©   (2006-11-28 14:44) [15]

> Krab12345  (28.11.2006 13:19:13)  [13]

Курсач чисто завязан на АПИ.

CopyFile это чистое АПИ


 
Krab12345   (2006-11-28 15:11) [16]

Условие курсача, передача через Сокеты, CopyFile разве передает через Сокеты?


 
Dmitrij_K   (2006-11-28 15:12) [17]


> Кто подскажет как перекинуть целиком файл, от клиента к
> серверу

TransmitFile


 
Сергей М. ©   (2006-11-28 15:12) [18]


> CopyFile разве передает через Сокеты?


Почему бы и нет ?


 
Сергей М. ©   (2006-11-28 15:14) [19]


> Условие курсача, передача через Сокеты


"Курсач" ты непременно "завалишь", если будешь в час по чайной ложке излагать его конкретности)


 
ancara ©   (2006-11-28 15:41) [20]

для CopyFile нужно расшарить этот файл сначала, он уже говорил, что надо самому сокетами рулить, разве нет?
да все он понятно излагает, суть задачи в целом ясна, остаются детали..
 Ты вот скажи просто поток в несколько байт ты уже можешь пересылать между сервером и клиентом? Если да, то что тебя интересует: как передать файл целиком?
 Читаешь этот файл в некий буфер, затем указатель на этот буфер передаешь вторым параметром в sendto и все, данные полетели...
 Правда если файл  большой будут трудности с максимальным размером того буфера, который можно в сокет запихнуть, ну тогда дробить его придется как-то... Я честно говоря насчет размеров уже плохо помню, может народ подскажет...


 
Сергей М. ©   (2006-11-28 15:49) [21]


> насчет размеров уже плохо помню


"Так не бывает - тут помню, тут не помню" (С)

)


 
ancara ©   (2006-11-28 16:02) [22]


> "Так не бывает - тут помню, тут не помню" (С)

:)
 Серьезно, я мало того что не помню "типовой" размер буфера сокета, я не понимаю чем руководствуются винсок, когда устанавливает этот размер...
 Но это вобщем-то и не важно, как правильно заметил Dmitrij_K, есть ф-ция TransmitFile, в которую можно просто передать хендл файла и размер "порций", которыми отправлять и "не париться", как говорится! :)


 
Сергей М. ©   (2006-11-29 08:47) [23]


> не помню "типовой" размер буфера сокета


А его и не надо запоминать - GetSockOpt(SO_RCVBUF/SO_SNDBUF) всегда под рукой и всегда подскажет текущий размер буферов приема/передачи.


> я не понимаю чем руководствуются винсок, когда устанавливает
> этот размер


В первую очередь - кратностью размера буфера размеру страницы вирт.памяти.
По умолчанию - 8к (две страницы по 4к)


> есть ф-ция TransmitFile


Эта ф-ция не работает с UDP-гнездами.


 
ancara ©   (2006-11-29 12:10) [24]

Krab12345, так тебе по UDP надо передавать?

> Сделал клиентскую часть, коннект с сервером устанавливает.

 Я думал что TCP имеется ввиду...


 
Сергей М. ©   (2006-11-29 12:25) [25]


> ancara ©   (29.11.06 12:10) [24]
>
> Krab12345, так тебе по UDP надо передавать?


Это не не ему надо, это ты ему предлагаешь в [20] использовать UDP)


 
ancara ©   (2006-11-30 11:55) [26]


> Это не не ему надо, это ты ему предлагаешь в [20] использовать
> UDP)
>

Перечитал три раза свой 20-й пост. Про UDP нинашол :(
Ткните носом :)


 
Сергей М. ©   (2006-11-30 12:19) [27]


> Ткните носом


Тыкаю)
В [12] и [20] ты упомянул ф-цию sendto()

Цитата из справки:
sendto is normally used on a connectionless socket

normally = обычно

Вот я и сделал предположение, что тобой неявно подразумевался именно UDP, каковой как раз и используется connectionless-гнездом)


 
ancara ©   (2006-11-30 12:39) [28]

А-а-а, вот оно как! :)
Ну конечно правильней было бы написать send, если TCP...



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

Форум: "Начинающим";
Текущий архив: 2006.12.17;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.51 MB
Время: 0.054 c
2-1164645725
Змей
2006-11-27 19:42
2006.12.17
cсобытие enter в memo


2-1164625210
Krants
2006-11-27 14:00
2006.12.17
Назначить событие всем компонентам


2-1164797502
Riply
2006-11-29 13:51
2006.12.17
Сортировка массива с сохранением "перестановок"


2-1164818064
мишок
2006-11-29 19:34
2006.12.17
Системный файл


15-1164203095
Darvin
2006-11-22 16:44
2006.12.17
Потоки TThread + быстродействие





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