Проблема синхронизации WinSock

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Проблема синхронизации WinSock

Сообщение JohnK » 04.12.2005 (Вс) 2:50

Вопрос:
На форме массив сокетов (сервер чата), работает это все дело на разных потоках или поочереди. Допустим если приходит на два сокета в один момент времени данные. Но ведь проседура (парсинг) обработки пришедших данных - одна! Как они будут ее делить? И как правильно организовать данный процесс? Создать "очередь" и выберать от туда пришедшие данные? :?: :?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

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

Сообщение tyomitch » 04.12.2005 (Вс) 3:25

В VB всё работает по очереди, и проблем синхронизации нет -- хвала Аллаху!
Т.е. если данные пришли, пока обрабатываются предыдущие, они ждут.
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Re: Проблема синхронизации WinSock

Сообщение vvs_adm » 04.12.2005 (Вс) 3:45

JohnK писал(а):Но ведь проседура (парсинг) обработки пришедших данных - одна! Как они будут ее делить? :?
Делить они ее будут по параметру Index
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 04.12.2005 (Вс) 19:14

Я спрашиваю потому, что при парсинге залетают "левые" данные.
Получается что перед вызовом процедуры парсинга успевают прицепиться данные, грубо говоря, следующий пакет... Как с этим бороться, вернее как ее решить?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

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

Сообщение tyomitch » 04.12.2005 (Вс) 19:17

Хочешь сказать, что у тебя данные, пришедшие на разные сокеты, сцепляются вместе? Не верю.
Изображение

vvs_adm
Гуру
Гуру
Аватара пользователя
 
Сообщения: 1492
Зарегистрирован: 03.02.2005 (Чт) 3:45
Откуда: оттуда ;)

Сообщение vvs_adm » 04.12.2005 (Вс) 21:54

tyomitch ну так если он (к примеру) на Index забивает, почему бы им не сцепиться? :lol:
Никогда не откладывай на завтра то, что можно ... отложить на послезавтра!

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 04.12.2005 (Вс) 23:37

нет c Index все порядке...

Ситуация такая:

Private Sub WS_DataArrival(Index As Integer, ByVal bytesTotal As Long)
Dim tempData As String

WS(Index).GetData tempData, vbString

Call ParseData(tempData, Index)

End Sub

....

так в ParseData

проскакивают две "посылки", т.е. скажем, посылаю "1", а потом "2":
и могу иногда получить "12"

Вот такие непонятки...
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

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

Сообщение tyomitch » 05.12.2005 (Пн) 0:26

Данные, пришедшие на один сокет, могут сцепляться. Поэтому нужно их разделять самому.
"Синхронизация" и массивы сокетов тут не при чём.
Изображение

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 05.12.2005 (Пн) 0:40

а какие "классические" способы существуют?
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

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

Сообщение tyomitch » 05.12.2005 (Пн) 0:47

"Классический" способ - перед каждым сообщением отправлять его длину. На приёмнике резать по этой длине.
Изображение

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 06.12.2005 (Вт) 16:25

А это оссобенность басиковского сокета или сокетов как таковых? (сцепление посылок)
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty

JohnK
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 874
Зарегистрирован: 03.08.2002 (Сб) 0:35
Откуда: 48.02` 37.58`

Сообщение JohnK » 08.12.2005 (Чт) 1:52

Да, классика помогла. Thanx! 8)
SELECT * FROM girls WHERE tits NOT NULL AND age BETWEEN 18 AND 25 ORDER BY Beauty


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

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

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

    TopList