Пишу болталку, на winsock'е, не больше 25 человек, серверный модуль + клиентские.
Размещаю на форме один winsock и присваиваю ему индекс 0. Объявляю глобальную переменную NEXT_INDEX, в которой будет индекс следующего winsock'а в массиве. Короче, стандартно...
Если у самого первого, с индексом 0, возникает событие Request, то NEXT_INDEX увеличивается. Теперь весчь, которую я не могу понять.
События развиваются так:
- Код: Выделить всё
Dim NewPort As Long
Load wskCLIENT(NEXT_INDEX)
NewPort = 50000 + NEXT_INDEX
wskCLIENT(NEXT_INDEX).LocalPort = NewPort
wskCLIENT(NEXT_INDEX).Accept requestID
До тех пор, пока не выполняется последняя комманда у вновь созданного wskCLIENT значение LocalPort именно такое, какое я и жду. Дело в том, что wskCLIENT(0), тот что обрабатывает изначально все запросы клиентов на соединения имеет свойство LocalPort = 50000.
Далее я себе это видел так: новый wskCLIENT() - значит ему присваиваем новый LocalPort куда перенаправим наш запрос на соединение. Чтобы не мудрить я и прибавляю к 50000 NEXT_INDEX. Фактически, как я полагал, должно было получиться так:
wskCLIENT(0) - у него LOCAL PORT = 50000,
wskCLIENT(n) - у него LOCAL PORT = 50000+n.
А на деле у всех после выполнения последней команды значение LocalPort = 50000, хоть тресни. Из-за чего это? Почему соединение все равно происходит по установленному для 0-вого контрола порту? Что это за наследование такое?...