Ребята я тут новенький, если что больно не бейте ;-)
Сегодня весь день потратил чтобы что найти на этом форуме .. не получилось ...
В общем задача такая. Это нужно именно по работе !!!
Пишу, точнее уже написал чат вроде ничего сложного,
но есть маленькая (БОЛЬШАЯ) проблема.
Сервер чата находится в инете при чем далеко и работает не стабильно.
Протокол TCP. Принцип работы, что я должен заполнить кучу форм.
На что он присылает ответы. В итоге получаю номер порта на который коннектиться.
Тоже вроде все без проблем. Но проблема в моем клиенте.
Дело в том, что на сервере у меня зарегистрировано несколько "комнат".
И законнектиться мне дают только с разных IP. Т.е. если на каком то (моем) IP
уже чат законнекчен - меня со следующим посылают подальше ...
Сейчас все работает на сторонней OCX, там для сокета можно указать
конкретно с какого IP я хочу вязаться. Но очень хочется отказаться от
сторонних производителей и сделать все средствами виндов. Т.к. на работе
компов много после установки сторонних наворотов на каждом всплывают свои глюки
причем разные. Даже приходилось ставить принудительные задержки методом тыка.
Еще траблы в том, что сокет не отвалился, а фактически я отконнекчен от чата.
А за это просто закрывают комнаты, чего очень бы не хотелось. Т.к. могу потерять работу.
В общем задача:
Завязаться с сервером виндовыми средствами по TCP (20 соединений с 20 разных IP на одном компе).
Везде на всех компах с клиентом по 20 IP, Винды XP
Если не затруднит, дайте линк на исходники похожие. Или подскажите тут возможные варианты.
вернее все понял, но нет реального описания проблемы.. кроме "отказаться от сторонних производителей и сделать все средствами виндов" ничего конкретного.. а может я просто туплю?*)
А вот стандартнымы виндовыми сокетами я не могу
указать конкретный IP с которого я буду вязаться,
как у меня написано выше типа "Me.IP.Text"
По всем вариантам которые я нашел по виндовым средствам,
только localIP , т.е. "главный" IP, который стоит первым списке виндов,
и через который работает например IExplorer.
Я наверное опять криво объяснил.
В общем в моей проге, открывается 20 окон, каждое окно это отдельный чат,
"отдельная комната", и каждый этот чат должен быть законнекчен с разных IP моего компа.
Т.е. у одной машины 20 интерфейсов и айпишники всех этих интерфейсов в одной подсети и для каждого есть роуты на сервер? Тут сложно что-то посоветовать, но, афаик, connect юзает GetBestInterface для определения, на какой интерфейс биндить сокет, можно попробовать поставить на него хук и подменять сокетам интерфейс, на который им вешаться в зависимости от того, какой сокет коннектится. Можно попробовать поэкспериментировать с SetTcpEntry. А можно использовать несколько другую схему: сделать бэк-чат, если это возможно, т.е. по любому интерфейсу серверу передается айпишник и порт, на который ему надо сконнектиться, сервер коннектится к клиенту, к его предварительно созданным сокетам (bind дает возможность указать локальный интерфейс) и обменивается с ним данными.
На каждой машине по одной сетевухе, в свойствах TCP по 20 айпи на комп,
благо в ХР это элементарно делается.
Бэк-чат не получится 100%, т.к. сервер чатов очень знаменитый
и подстраиваться под клиента точно не будет. У них (у сервера)
все чаты идут через вэб-интерфейс и они допускают открытие только
одного чата со стороны клиента. Но так как это платный чат и именно
для этого я и написал программу. Т.е. чем больше чатов (комнат) открыто
одновременно, тем больше вероятность прихода гостя и тем самым больше
вероятность заработать больше.
Значит я так понимаю что под виндовыми фишками это сделать не реально. Жаль.
Но что самое интересное, что мой знакомый, правда из конкурирующей фирмы
Тоже написал нечто похожее но на Си и без всяких сторонних штучек.
Теоретически можно было бы купить у него программу, но у меня слишком
много привязок и наворотов именно под специфику работы нашей конторы.
И логи и базы и информационный сервис. Любые изменения на сервере
приведут программу в нерабочее состояние. И как минимум несколько десятков
человек останутся на несколько дней без работы. А исходники он естественно не даст.
Коммерция блин ))
Я просто хотел немного упростить свою прогу и уменьшить вес.
В несжатом виде один екзешник весит уже 1,5 метра
я уж не говорю про библиотеки. Да и стабильности хотелось бы ...
Но в любом случае, ребята огромное спасибо за ваши ответы !!!
Не хочешь сторонних производителей? А как ты собираешься пакеты на лету собирать? Вручную что ли?
Я занимался такой ерундой когда-то, но на WinPCap API, что тоже как бы частью винды не является.
Либо ставь себе виртуальную машину.
По сути ничем не отличается от виндовой, но есть возможность указать свой IP
(SocketTools 4.0 Visual Edition
Version 4.00.4010
cstcpctl.ocx
www.catalyst.com)
Вот я и подумал, раз человек написал на Си без сторонних,
значит наверняка есть какой нибудь недокументированный метод или свойство.
Или просто я еще чего то не знаю. Вот почему я и обратился с таким вопросом.