Передача данных (сервер-клиент)

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Передача данных (сервер-клиент)

Сообщение VERITAS » 03.04.2007 (Вт) 14:13

Всем привет!
Написал проект клиент-сервер по надежному соединению (без подробностей). И вроде бы все работает, да вот только иногда происходят потери байтов. И происходит это не всегда - а в зависимости от загруженности сети. К примеру файл размером 2020 байт может дойти только 1000 байт, а файл скажем размером 3060 байт приходит нормальным. Проверял и на 100 байт и 1кб и 16кб- нормально.

С сокетами работаю вручную - через API - не через обертки.
Передача данных происходит пакетами по 8000 байт. Данные передаются как массив байтов.

Собственно в чем и вопрос - а не много ли - учитывая что клиент может связаться с сервером на разной скорости начиная от 20 кб/сек и заканчивая локальной сетью. Возможности протестировать на мешьшей скорости чем 1 мб./сек. нет - может кто сталкивался и реализовал подобную ситуацию.

Спасибо!
No comments ...

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16478
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Сообщение Хакер » 03.04.2007 (Вт) 14:17

вероятно баг в api-шном сокете. Сокет можно по разному делать. Если делать его так, что "создаётся специальное окно для каждого экзепляра сокета, которое принимает нотификации и ... - то такой баг будет возникать если основной поток заблокирован.

Сам с этим встречался когда юзал CSocket
Последний раз редактировалось Хакер 03.04.2007 (Вт) 14:21, всего редактировалось 1 раз.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.04.2007 (Вт) 14:20

Если отправляешь по UDP, то такое может быть. Надо самому подтверждать доставку и перезапрашивать пакеты.
По TCP данные частично теряться не могут. Или весь пакет (все 8000 байт) дойдут полностью, или не дойдут совсем. Скорее баг где-то в процедуре накопления полученных пакетов -- пакет может фрагментироваться, даже при размере 8Кб.
Lasciate ogni speranza, voi ch'entrate.

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 03.04.2007 (Вт) 14:41

to Хакер: используется техника 1:М (один ко многим) - один сервер много клиентов. Экземпляры сокетов не создаются в отдельном окне. Да и вообще - сервер отсылает все данные и это видно и в логах и через дебаг и по кол-во отосланных байт в общем трафике.

to alibek: я имел ввиду надежное соединения - TCP ибо UDP ненадежное. ... Я тоже так думал - но потом передумал ибо никакого накопления не идет - потому что максимальный размер файла который сервер передает клиенту - это 5000 байт. Что входит в один пакет.

На что еще можно подумать - незнаю, так как данный эффект не всегда проявляется. Данные отсылаются в виде массива байтов - так и принимаются в виде массива байтов. Но в случае потери - по параметрам (...) видно что пришли не все данные - что собственно видно и явно :(
No comments ...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 03.04.2007 (Вт) 15:08

VERITAS писал(а):]to Хакер: используется техника 1:М (один ко многим) - один сервер много клиентов.

Если клиентов много, то лучше будет использовать мультикаст (224.x.x.x).

VERITAS писал(а):Я тоже так думал - но потом передумал ибо никакого накопления не идет - потому что максимальный размер файла который сервер передает клиенту - это 5000 байт. Что входит в один пакет.

Вот здесь у тебя и ошибка.
Никто тебе не гарантирует, что эти 5000 байт придут одним пакетом.
Если не хочешь возиться с накоплением, отсылай блоками по 80 байт, ЕМНИП это минимальный размер, который не фрагментируется.
Lasciate ogni speranza, voi ch'entrate.

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 03.04.2007 (Вт) 15:28

alibek писал(а):Если клиентов много, то лучше будет использовать мультикаст (224.x.x.x).

Не,... multicasting в моем проекте - не уместен.
alibek писал(а):Никто тебе не гарантирует, что эти 5000 байт придут одним пакетом.
Если не хочешь возиться с накоплением, отсылай блоками по 80 байт, ЕМНИП это минимальный размер, который не фрагментируется.

Вот так и сделаю.
No comments ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.04.2007 (Вт) 17:02

VERITAS писал(а):
alibek писал(а):Никто тебе не гарантирует, что эти 5000 байт придут одним пакетом.
Если не хочешь возиться с накоплением, отсылай блоками по 80 байт, ЕМНИП это минимальный размер, который не фрагментируется.

Вот так и сделаю.

Только гарантии того, что все эти блоки дойдут каждому клиенту, у тебя как не было, так и не будет.
Изображение

VERITAS
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 212
Зарегистрирован: 12.12.2004 (Вс) 20:31

Сообщение VERITAS » 03.04.2007 (Вт) 17:25

tyomitch писал(а):Только гарантии того, что все эти блоки дойдут каждому клиенту, у тебя как не было, так и не будет.

Тогда как быть? - организовать цепочку:
сервер->пакет_клиенту_80байт-> ответ_серверу_об_успешном_получении_пакета->и_так_далее
В конце концов после пересылки всех пакетов отсылать признак конца данных.
No comments ...

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 03.04.2007 (Вт) 18:57

Угу, от каждого клиента придётся получать подтверждение каждого пакета.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 64

    TopList