Передача бинарных данных через WinSock…

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
TNT
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 16.03.2002 (Сб) 19:07
Откуда: Russia

Передача бинарных данных через WinSock…

Сообщение TNT » 29.04.2003 (Вт) 12:33

Короче - у меня возник вопрос. Как лучше (эффективнее) передавать данные через этот элемент? Мне, например, нужно передать список из имен людей (я формирую строку с опр. началом (допустим 5 символов) и каждое имя отделяю опр. Последовательностью (2-3 символа) ). Потом у меня функция ОБРЕЗАЕТ эту строку на подстроки(после приёма, конечно). Но вот в чем вопрос - я теряю много байт только из-за того, что ,как мне кажется, через WinSock можно передовать толкьо Asc/ Unicode - символы… Просто , если представить, что юзер нечаянно начнет писать сообщение (это типа чат у меня) с МОЕЙ последовательностью - программа будет некорректно работать и всё … Как сделать так , чтобы максимально сократить размер ЭТОЙ строки? Посоветуйте, пожалуйста.

ASD
Модератор
Модератор
Аватара пользователя
 
Сообщения: 1758
Зарегистрирован: 07.12.2001 (Пт) 21:08
Откуда: Russia

Сообщение ASD » 29.04.2003 (Вт) 13:21

Непонятно зачем разделять имена последовательностью 2-3 символа.
Use char(0) например и режь потом на подстроки Split(, char(0))
Зачем 5 символов в начале?

Для того чтоб оптимизировать ты можешь применять сжатие. Например по алгоритму zip или хофмана. Но это хорошо работает при передачи
больших текстовых данных. Тоесть надо накопить некий текст потом (создать пакет данных) его сжать, передать клиенту а там расжать.

Бинарный случай тебе ничего не даст. Он нужен при передачи бинарной инфы а текст как был в так и будет.

PS. Если будешь сжимать, тебе какраз понадобится передавать сжатые
данные в бинари. Как масив.
Moderator VBStreets
---------------------------

ShadowCaster
Бывалый
Бывалый
 
Сообщения: 254
Зарегистрирован: 24.05.2002 (Пт) 10:52

...

Сообщение ShadowCaster » 29.04.2003 (Вт) 22:16

- Используй Byte() вместо String (т.к. String есть WideString на самом деле)
- Для выделения байтов списка имён и текста пользователя сделай примерно так:

Function SetUserlistData(txt as string) as string
dim b as byte()
redim b(len(txt))
b = txt
for a=1 to len(b) step 2
b(a+1) = 1
next

SetUserlistData = b
End Function

Сия функция использует особенности WideString (а именно её 2-й нулевой байт при тексте) для установки "флага" юзверь-листа.
После приёма данных загоняешь их из принятого стринга в Byte() и проверяешь каждый 2-й байт на наличие "0" (сообщение юзверя) или "1" (байт из юзверь-листа).

TNT
Обычный пользователь
Обычный пользователь
 
Сообщения: 65
Зарегистрирован: 16.03.2002 (Сб) 19:07
Откуда: Russia

Сообщение TNT » 03.05.2003 (Сб) 17:37

Спасибо большое!


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

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

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 84

    TopList