Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Через сокет с разных IP - помогите ! Добавлено: 15.09.05 20:09  

Автор вопроса:  vasty
Ребята я тут новенький, если что больно не бейте ;-)
Сегодня весь день потратил чтобы что найти на этом форуме .. не получилось ...

В общем задача такая. Это нужно именно по работе !!!
Пишу, точнее уже написал чат вроде ничего сложного,
но есть маленькая (БОЛЬШАЯ) проблема.

Сервер чата находится в инете при чем далеко и работает не стабильно.
Протокол TCP. Принцип работы, что я должен заполнить кучу форм.
На что он присылает ответы. В итоге получаю номер порта на который коннектиться.
Тоже вроде все без проблем. Но проблема в моем клиенте.

Дело в том, что на сервере у меня зарегистрировано несколько "комнат".
И законнектиться мне дают только с разных IP. Т.е. если на каком то (моем) IP
уже чат законнекчен - меня со следующим посылают подальше ...

Сейчас все работает на сторонней OCX, там для сокета можно указать
конкретно с какого IP я хочу вязаться. Но очень хочется отказаться от
сторонних производителей и сделать все средствами виндов. Т.к. на работе
компов много после установки сторонних наворотов на каждом всплывают свои глюки
причем разные. Даже приходилось ставить принудительные задержки методом тыка.
Еще траблы в том, что сокет не отвалился, а фактически я отконнекчен от чата.
А за это просто закрывают комнаты, чего очень бы не хотелось. Т.к. могу потерять работу.

В общем задача:

Завязаться с сервером виндовыми средствами по TCP (20 соединений с 20 разных IP на одном компе).

Везде на всех компах с клиентом по 20 IP, Винды XP

Если не затруднит, дайте линк на исходники похожие. Или подскажите тут возможные варианты.

Просто ОЧЕНЬ нужно !!! Спасибо !!!

Ответить

  Ответы Всего ответов: 11  

Номер ответа: 1
Автор ответа:
 E-Man



Вопросов: 3
Ответов: 132
 Профиль | | #1 Добавлено: 15.09.05 20:24
ниче не понял =))

а про многоканальные винсоки тут уже говорили не раз.

используй массив стандартных компонент winsock..

Ответить

Номер ответа: 2
Автор ответа:
 E-Man



Вопросов: 3
Ответов: 132
 Профиль | | #2 Добавлено: 15.09.05 20:30
вернее все понял, но нет реального описания проблемы.. кроме "отказаться от сторонних производителей и сделать все средствами виндов" ничего конкретного.. а может я просто туплю?*)

Ответить

Номер ответа: 3
Автор ответа:
 vasty



Вопросов: 2
Ответов: 6
 Профиль | | #3 Добавлено: 15.09.05 20:57
Через сторонних я делал так:

Me.SocketWrench1.Connect "сервер.ком", Val(Me.Port.Text), swProtocolTcp, , , Me.IP.Text

А вот стандартнымы виндовыми сокетами я не могу
указать конкретный IP с которого я буду вязаться,
как у меня написано выше типа "Me.IP.Text"

По всем вариантам которые я нашел по виндовым средствам,
только localIP , т.е. "главный" IP, который стоит первым списке виндов,
и через который работает например IExplorer.

Я наверное опять криво объяснил.

В общем в моей проге, открывается 20 окон, каждое окно это отдельный чат,
"отдельная комната", и каждый этот чат должен быть законнекчен с разных IP моего компа.

Например у меня в компе 20 IP-адресов

С 213.ххх.ххх.42 по 213.ххх.ххх.62

соответственно:

Form1.SocketWrench1.Connect "сервер.ком", Val(Me.Port.Text), swProtocolTcp, , , 213.ххх.ххх.42
Form2.SocketWrench1.Connect "сервер.ком", Val(Me.Port.Text), swProtocolTcp, , , 213.ххх.ххх.43

и до

Form20.SocketWrench1.Connect "сервер.ком", Val(Me.Port.Text), swProtocolTcp, , , 213.ххх.ххх.62

Вот это мне и не сделать виндовыми сокетами. Виндовые сокеты вяжутся только с "главного" IP

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 15.09.05 22:11
Ты вообще в курсе что такое винсок? Посмотри исхоники, примеры, библу кодов

Ответить

Номер ответа: 5
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #5
Добавлено: 16.09.05 05:09
Т.е. у одной машины 20 интерфейсов и айпишники всех этих интерфейсов в одной подсети и для каждого есть роуты на сервер? Тут сложно что-то посоветовать, но, афаик, connect юзает GetBestInterface для определения, на какой интерфейс биндить сокет, можно попробовать поставить на него хук и подменять сокетам интерфейс, на который им вешаться в зависимости от того, какой сокет коннектится. Можно попробовать поэкспериментировать с SetTcpEntry. А можно использовать несколько другую схему: сделать бэк-чат, если это возможно, т.е. по любому интерфейсу серверу передается айпишник и порт, на который ему надо сконнектиться, сервер коннектится к клиенту, к его предварительно созданным сокетам (bind дает возможность указать локальный интерфейс) и обменивается с ним данными.

Ответить

Номер ответа: 6
Автор ответа:
 vasty



Вопросов: 2
Ответов: 6
 Профиль | | #6 Добавлено: 16.09.05 10:59
На каждой машине по одной сетевухе, в свойствах TCP по 20 айпи на комп,
благо в ХР это элементарно делается.

Бэк-чат не получится 100%, т.к. сервер чатов очень знаменитый
и подстраиваться под клиента точно не будет. У них (у сервера)
все чаты идут через вэб-интерфейс и они допускают открытие только
одного чата со стороны клиента. Но так как это платный чат и именно
для этого я и написал программу. Т.е. чем больше чатов (комнат) открыто
одновременно, тем больше вероятность прихода гостя и тем самым больше
вероятность заработать больше.

Значит я так понимаю что под виндовыми фишками это сделать не реально. Жаль.

Но что самое интересное, что мой знакомый, правда из конкурирующей фирмы ;-)
Тоже написал нечто похожее но на Си и без всяких сторонних штучек.
Теоретически можно было бы купить у него программу, но у меня слишком
много привязок и наворотов именно под специфику работы нашей конторы.
И логи и базы и информационный сервис. Любые изменения на сервере
приведут программу в нерабочее состояние. И как минимум несколько десятков
человек останутся на несколько дней без работы. А исходники он естественно не даст.
Коммерция блин ;-)))

Я просто хотел немного упростить свою прогу и уменьшить вес.
В несжатом виде один екзешник весит уже 1,5 метра
я уж не говорю про библиотеки. Да и стабильности хотелось бы ...

Но в любом случае, ребята огромное спасибо за ваши ответы !!!

Ответить

Номер ответа: 7
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #7 Добавлено: 16.09.05 11:32
Не хочешь сторонних производителей? А как ты собираешься пакеты на лету собирать? Вручную что ли?
Я занимался такой ерундой когда-то, но на WinPCap API, что тоже как бы частью винды не является.
Либо ставь себе виртуальную машину.

Ответить

Номер ответа: 8
Автор ответа:
 vasty



Вопросов: 2
Ответов: 6
 Профиль | | #8 Добавлено: 16.09.05 12:30
Ребята, либо я опять криво объяснил. Либо я что то не допонимаю ...

Есть в виндах такая OCXина MSWINSCK.OCX

Все меня там как бы устраивает если работать надо было бы с одного IP
Я обкатывал на нем свою прогу с одного IP (открытие одного чата).

Метод стандартный: Winsock1.Connect [RemoteHost], [RemotePort]

И все ! Без вариантов ...

Есть там такая фишка как "Winsock1.LocalIP", но опять же только на чтение !
Т.е. я не могу присвоить свое значение.

У сторонней же, есть возможность написать так:

SocketWrench1.Connect RemoteHost, RemotePort, Protokol, , , ЛюбойМойIP

По сути ничем не отличается от виндовой, но есть возможность указать свой IP

(SocketTools 4.0 Visual Edition
Version 4.00.4010
cstcpctl.ocx
www.catalyst.com)

Вот я и подумал, раз человек написал на Си без сторонних,
значит наверняка есть какой нибудь недокументированный метод или свойство.
Или просто я еще чего то не знаю. Вот почему я и обратился с таким вопросом.

Ответить

Номер ответа: 9
Автор ответа:
 Sharp


Лидер форума

ICQ: 216865379 

Вопросов: 106
Ответов: 9979
 Web-сайт: sharpc.livejournal.com
 Профиль | | #9
Добавлено: 16.09.05 20:07
Дизассемблерируй сторонний сокет и посмотри, как там реализован выбор айпишника для коннекта.

Ответить

Номер ответа: 10
Автор ответа:
 vasty



Вопросов: 2
Ответов: 6
 Профиль | | #10 Добавлено: 16.09.05 20:23
Хех ... я бы с удовольствием. Но в ассемблере я уже не силен ;-(
Разьве что в свое время Z80 на Sinclair ;-)

Ответить

Номер ответа: 11
Автор ответа:
 LamerOnLine



ICQ: 334781088 

Вопросов: 108
Ответов: 2822
 Профиль | | #11 Добавлено: 19.09.05 10:19
Тогда лучше не парься. Ты в этих адаптерах и контрольных суммах увязнешь напрочь. Юзай ОСХ :)

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам