![]() |
Модераторы: xvr |
![]() ![]() ![]() |
|
UserNet |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 226 Регистрация: 13.12.2006 Где: Новосибирск Репутация: нет Всего: 3 |
Доброго времение суток, пытаюсь написать сервер который работает по двум протоколам (TCP и UDP) параллельно, всё хорошо, но получается передать файл. В чём проблема?
![]() Сервер
Клиент TCP
Клиент UDP
А вот ссылка на оригинал статьи с которую брал за основу сервера тут Помогите пожалуйста а то я уже замучался. ![]() ![]() ![]() |
||||||
|
|||||||
vinick |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 285 Регистрация: 9.6.2005 Репутация: 4 Всего: 22 |
читай что такое UDP и с чем его едят.
в строке 1 у тебя после старта сервера сидит 10 потоков. В какой-то момент клиент шлет имя файла - "test1.txt", просыпается поток П1, читает это имя и создает файл. Пока он это делает, клиент шлет еще сообщение. Его перехватывает поток П2, в той же строке 1, т.е. он думает что тоже читает имя файла. ну и так далее в зависимости от threads и размера передаваемого файла. в итоге на диске получается каша. вот лог работы UDP части твоего сервера
|
||||||
|
|||||||
A1ukard |
|
|||
Новичок Профиль Группа: Участник Сообщений: 16 Регистрация: 19.3.2007 Репутация: нет Всего: нет |
int n=0;
while ((n=read(fd,buff,BUFSIZ))>0) { printf(buff); send(sock, buff, n, 0); } такое будет работать разве что на локалхосте и, если повезет, в локалке. UDP пакеты могут теряться, приходить в произвольном порядке + один пакет может прийти несколько раз. Решение следующее: (считаем что клиент получает файл от сервера) к каждому пакету цепляешь его номер или смещение данных в файле. на каждый полученный пакет клиент должен отправить подтверждение. Повторяющиеся пакеты должны игнорироваться как клиентом, так и сервером. Если от клиента во время не пришло подтверждение, пакет посылается снова. Для повышения производительности, клиент должен не дожидаясь подтверждения отправлять сразу несколько пакетов клиенту, а клиент слать несколько подтверждений одним пакетом, притом несколько раз, чтобы сервер не отправил все полученные части заново в случае потери подтверждения. ЗЫ. Учти, что несмотря на то, что в UDP пакет физически может влезть до 64 Кб данных, гарантированно через все роутеры и шлюзы проходят только пакеты не длиннее 256-и байт (точно не помню, почитай про протокол DNS в RFC). |
|||
|
||||
MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 84 Всего: 207 |
с чего это вдруг? и причем здесь DNS? -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
UserNet |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 226 Регистрация: 13.12.2006 Где: Новосибирск Репутация: нет Всего: 3 |
А можно пример кода?
![]() |
|||
|
||||
shara |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 344 Регистрация: 29.6.2004 Где: печенье? Репутация: нет Всего: 2 |
A1ukard,
мне интересно, есть ли тогда смысл применять быстрый но не надёжный UDP и применять все эти повторные и многократные пересылки одной и той же информации... не получится ли медленнее чем TCP обяснити пожалуйста или хотя бы ткните ссылкой Это сообщение отредактировал(а) shara - 12.10.2008, 21:45 -------------------- с точки зрения аэродинамики шмель не может летать |
|||
|
||||
Maka6er |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 150 Регистрация: 27.2.2007 Где: Киев Репутация: нет Всего: 3 |
Если надо передать файл или что то что гарантированно должно дойти то юзают TCP, но если надо передавать потоковые данные(видео, звук) в которых критична скорость доставки, а не надежность - UDP
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С/С++: Программирование под Unix/Linux" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |