![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Передача файлов
Krab12345 © (2006-11-28 10:04:00)Как передать файлы между 2-мя локальными компьютерами на чистом API?
ancara (2006-11-30 12:39:00) [1]А-а-а, вот оно как! :)
Ну конечно правильней было бы написать send, если TCP...
Сергей М. (2006-11-30 12:19:00) [2]
> Ткните носом
Тыкаю)
В [12] и [20] ты упомянул ф-цию sendto()
Цитата из справки:
sendto is normally used on a connectionlesssocket
normally = обычно
Вот я и сделал предположение, что тобой неявно подразумевался именно UDP, каковой как раз и используется connectionless-гнездом)
ancara (2006-11-30 11:55:00) [3]
> Это не не ему надо, это ты ему предлагаешь в [20] использовать
> UDP)
>
Перечитал три раза свой 20-й пост. Про UDP нинашол :(
Ткните носом :)
Сергей М. (2006-11-29 12:25:00) [4]
> ancara © (29.11.06 12:10) [24]
>
> Krab12345, так тебе по UDP надо передавать?
Это не не ему надо, это тыему предлагаешь в [20] использовать UDP)
ancara (2006-11-29 12:10:00) [5]Krab12345, так тебе по UDP надо передавать?
> Сделал клиентскую часть, коннект с сервером устанавливает.
Я думал что TCP имеется ввиду...
Сергей М. (2006-11-29 08:47:00) [6]
> не помню "типовой" размер буфера сокета
А его и не надо запоминать - GetSockOpt(SO_RCVBUF/SO_SNDBUF) всегда под рукой и всегда подскажет текущий размер буферов приема/передачи.
> я не понимаю чем руководствуются винсок, когда устанавливает
> этот размер
В первую очередь - кратностью размера буфера размеру страницы вирт.памяти.
По умолчанию - 8к (две страницы по 4к)
> есть ф-ция TransmitFile
Эта ф-ция не работает с UDP-гнездами.
ancara (2006-11-28 16:02:00) [7]
> "Так не бывает - тут помню, тут не помню" (С)
:)
Серьезно, я мало того что не помню "типовой" размер буфера сокета, я не понимаю чем руководствуются винсок, когда устанавливает этот размер...
Но это вобщем-то и не важно, как правильно заметил Dmitrij_K, есть ф-ция TransmitFile, в которую можно просто передать хендл файла и размер "порций", которыми отправлять и "не париться", как говорится! :)
Сергей М. (2006-11-28 15:49:00) [8]
> насчет размеров уже плохо помню
"Так не бывает - тут помню, тут не помню" (С)
)
ancara (2006-11-28 15:41:00) [9]для CopyFile нужно расшарить этот файл сначала, он уже говорил, что надо самому сокетами рулить, разве нет?
да все он понятно излагает, суть задачи в целом ясна, остаются детали..
Ты вот скажи просто поток в несколько байт ты уже можешь пересылать между сервером и клиентом? Если да, то что тебя интересует: как передать файл целиком?
Читаешь этот файл в некий буфер, затем указатель на этот буфер передаешь вторым параметром в sendto и все, данные полетели...
Правда если файл большой будут трудности с максимальным размером того буфера, который можно в сокет запихнуть, ну тогда дробить его придется как-то... Я честно говоря насчет размеров уже плохо помню, может народ подскажет...
Сергей М. (2006-11-28 15:14:00) [10]
> Условие курсача, передача через Сокеты
"Курсач" ты непременно "завалишь", если будешь в час по чайной ложке излагать его конкретности)
Сергей М. (2006-11-28 15:12:00) [11]
> CopyFile разве передает через Сокеты?
Почему бы и нет ?
Dmitrij_K (2006-11-28 15:12:00) [12]
> Кто подскажет как перекинуть целиком файл, от клиента к
> серверу
TransmitFile
Krab12345 (2006-11-28 15:11:00) [13]Условие курсача, передача через Сокеты, CopyFile разве передает через Сокеты?
Anatoly Podgoretsky (2006-11-28 14:44:00) [14]> Krab12345 (28.11.2006 13:19:13) [13]
Курсач чисто завязан на АПИ.
CopyFile это чистое АПИ
Reindeer Moss Eater (2006-11-28 13:23:00) [15]windows.CopyFile
Krab12345 (2006-11-28 13:19:00) [16]Курсач чисто завязан на АПИ.
Люди помогите со следующем:
Сделал я серверную часть, она сокет слушает.
Сделал клиентскую часть, коннект с сервером устанавливает.
Кто подскажет как перекинуть целиком файл, от клиента к серверу. Желательно с примерчиком.
ancara (2006-11-28 11:47:00) [17]А на чем акцент курсача стоит, на передаче данных по сети или именно на винапи?
Если на винапи и сокетах, тогда действительно придется велосипед писать... Попробуй хотя бы пару байт между сокетами переслать, потом уж и файлы будешь толкать.
Там все просто на самом деле:
инициализируем винсок WSAStartup;
создаем сокет sock := socket(... ... ...);
биндим сокет на порт bind(sock, ...)
ну и все, sendto отправляет recvfrom принимает
Сергей М. (2006-11-28 11:25:00) [18]
> это курсач, поэтому надо писать
В задании на "курсач" прямо так и указано, что серверная сторона должна быть написана "с нуля" и использовать существующие серверы нельзя ?
Krab12345 (2006-11-28 11:14:00) [19]народ - это курсач, поэтому надо писать
palva (2006-11-28 11:00:00) [20]1. На компьютере источнике запустить WebServer - Бывают очень маленькие типа http://www.ritlabs.com/en/products/tinyweb/ - 53 Кб
2. На компьютере приемнике обратиться к функции URLDownloadToFile из URLMon.tpu