Форум: "Начинающим";
Текущий архив: 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