Проблема передачи данных в сети сокетами 2.0
Добавлено: 26 авг 2007, 08:54
Проблема следующего типа:
Есть сервер, способный поддерживать большое количество клиентов. Когда передача данных идет только от одного клиента, все пучком. При испытаниях заставил всех клиентов высылать постоянно данные. Стал наблюдаться эффект разрыва данных. Т.e. данные от клиента приходят по частям, причем каждая часть приходит, как новый пакет. Я использовал два решения этой проблемы: передача завершающего символа или передача в первых двух байтах истинной длинны пакета. Т.е. пока не будет найден оконечный символ, каждая новая порция данных добавляется в один буфер. И также с размером: Принимаю до тех пор, пока истинный размер данных не уравняется с фактическим. Эффект разрыва также наблюдал при передаче длинных пакетов. (мегабайты)
Вопрос:
Есть ли в сокете 2.0 средства, с помощью которых можно распознать, что пакет передается по частям, ну и например то, что он наконец весь пришел. Или это делается именно так, как это сделал я? Спрашиваю потому, что клиент после отправки генерирует таки сообщения, которые сигнализируют о разрыве пакета, а также о том, что все полностью доставлено.
PS
Это наблюдалось на VB. Будет ли такая же проблема в C++, или там все доведено до ума? Просто у меня возникает мнение, что пакеты могут разбиваться на части не на уровне API, а на уровне VB.
Вообщем, кто что об этом знает, пожалста помогите. У меня на данный момент нет возможности испытать сервер в условиях локальной сети. А на виртуалке, как ни странно, все это по другому работает. Иногда даже без всяких разрывов.
Заранее спасибо. Новичок TCoder.
Есть сервер, способный поддерживать большое количество клиентов. Когда передача данных идет только от одного клиента, все пучком. При испытаниях заставил всех клиентов высылать постоянно данные. Стал наблюдаться эффект разрыва данных. Т.e. данные от клиента приходят по частям, причем каждая часть приходит, как новый пакет. Я использовал два решения этой проблемы: передача завершающего символа или передача в первых двух байтах истинной длинны пакета. Т.е. пока не будет найден оконечный символ, каждая новая порция данных добавляется в один буфер. И также с размером: Принимаю до тех пор, пока истинный размер данных не уравняется с фактическим. Эффект разрыва также наблюдал при передаче длинных пакетов. (мегабайты)
Вопрос:
Есть ли в сокете 2.0 средства, с помощью которых можно распознать, что пакет передается по частям, ну и например то, что он наконец весь пришел. Или это делается именно так, как это сделал я? Спрашиваю потому, что клиент после отправки генерирует таки сообщения, которые сигнализируют о разрыве пакета, а также о том, что все полностью доставлено.
PS
Это наблюдалось на VB. Будет ли такая же проблема в C++, или там все доведено до ума? Просто у меня возникает мнение, что пакеты могут разбиваться на части не на уровне API, а на уровне VB.
Вообщем, кто что об этом знает, пожалста помогите. У меня на данный момент нет возможности испытать сервер в условиях локальной сети. А на виртуалке, как ни странно, все это по другому работает. Иногда даже без всяких разрывов.
Заранее спасибо. Новичок TCoder.