![]() |
Модераторы: feodorv |
![]() ![]() ![]() |
|
w32blaster |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.1.2006 Где: Tln/Slmae Репутация: нет Всего: нет |
Здравствуйте всем. Прошу прощения, что воскресаю старый топик, но если я открою новый, то всяко меня отправят юзать поиск.
Проблема собсна у меня по сабжу. Снова лаба в универе, и снова трудно разобраться. Задание - сделать прогу, которая имитирует дейсвие ФТП-клиента и сервера. На практике это два скрипта, один за сервер, другой за клиент, и обмениваются сообщениями через сокет по TCP. Препод выложил нам два "исходника" - две проги, от которых мы можем отходить. Могу привести ссылки на них: postit.c postit.h postit_server.c (сервер в Эстонии, если не будет качаться - скажите, перезалью). Эти два примера просто обмениваются сообщениями. Лично я на основе их реализовал функцию ls, то есть просмотр папок и фалов, quit, ну это легко, и cd смена папок. Вот. Осталось дело за малым - put и get. Вот тут-то я и застрял. Собсна, вот мой и вопрос: как можно реализовать передачу фалов? Я в этом топике прочёл, что это нужно делать так же, как и сообщения. Это понятно. Но а поподробнее? Нужно файл считывать по 100 байт и перекидывать на сервер? А как тогда сервер их должен ловить? Ну то есть.... Вобщем, прошу примера или ссылки на толковый пример или туториал. А то не совсем понятно, как сервер получает сообщения. Если, скажем, отправлять клиент будет таким образом:
то как это же события будет обрабатывать сервер? Вот... До сессии три недели.... прошу помощи, любой.... заранее благодарен. Это сообщение отредактировал(а) Олег2005 - 11.12.2008, 14:58 |
|||
|
||||
vinick |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 6 Всего: 22 |
сценарий для PUT
|
|||
|
||||
w32blaster |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 2.1.2006 Где: Tln/Slmae Репутация: нет Всего: нет |
Спасибо, добрый человек.
![]() ![]() Это сообщение отредактировал(а) w32blaster - 11.12.2008, 15:44 |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 1 Всего: 14 |
не катит что будем делать если посередине произошла ошибка чтения файла? разрывать соединение? намного лучше передавать файл блоками с подтверждениями с другой стороны - вдруг там место закончилось или еще что-то случилось |
|||
|
||||
antsh85 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 8 Регистрация: 2.1.2008 Репутация: нет Всего: нет |
Привет,
Я туже лабу делаю. Сценарий: Client С & Server S C->S do LS S: LS response is 1000bytes = 3 packets S->C send to C total size of response (1000 bytes) sent (...) S->C send 3 packets sent (...) x 3 C<-S LS response size (1000 bytes) -> recv(...) C<-S 3 packets (вот тут я получаю оборванные пакеты, потому что к тому времени когда клиент начнёт делать recv(...) сервер уже закончивает делать sent(...) ) Мне казалось что если сервер шлёт что то сокету, то это должно где то буфферится, до тех пор пока на стороне клиента не будет вызванно recv(...) Но я похоже не прав, как всё в дейсвительности? Это сообщение отредактировал(а) antsh85 - 25.12.2008, 19:02 |
|||
|
||||
J0ker |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 1 Всего: 14 |
для TCP оно буферится
просто если recv вызван до того, как все данные дошли то recv возвращает тот кусок который уже пришел - вне зависимости как это было отправлено через send данные надо собирать из кусков, либо выставить флаг MSG_WAITALL - тогда блокирующий recv заблокируется пока не будет заполнен буфер, либо закрыт сокет, либо не сорвет сигналом, либо не придет OOB Это сообщение отредактировал(а) J0ker - 26.12.2008, 02:18 |
|||
|
||||
![]() ![]() ![]() |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Сети | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |