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

Вниз

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

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

Наверх




Память: 0.53 MB
Время: 0.083 c
2-1164783034
Hero
2006-11-29 09:50
2006.12.17
Завершить процесс explorer,просто убивание процесса неподходит


1-1161620565
*Ray*
2006-10-23 20:22
2006.12.17
Колесико мыши в DBGrid


15-1164404890
J_box
2006-11-25 00:48
2006.12.17
Никто не попадал в подобную ситуацию?


2-1164726603
PitTong
2006-11-28 18:10
2006.12.17
Текстовый редактор


11-1140813817
AndrewHz
2006-02-24 23:43
2006.12.17
В KOL Memo1.lines.loadfromfile() не работает