como hace bifrost para conectar varios servidores a un cliente?

Iniciado por Proxy Lainux, 26 Mayo 2008, 07:03 AM

0 Miembros y 1 Visitante están viendo este tema.

Proxy Lainux

hola

lo que quiero hacer es algo parecido a bifrost... que el cliente acepte varias conexiones de varios servidores... pero no se que hacer para que los servidores escogan algun puerto y que no haya problemas si hay otro servidor con el mismo puerto...

se me ocurrio hacer que los servidores al iniciar hagan un random en el puerto... para que el cliente los vaya detectando... pero no se si eso este bien... porke, que pasaria si dos computadoras que tienen el server abren el mismo puerto... creen que habria problemas?... o si me conecto con algun puerto... y otras computadoras se intentan conectar con el mismo puerto... no interrumpen la conexion del primero que se conecto con el cliente?

o como le haria bifrost para hacer una conexion inversa y que el puerto no sea el mismo y sin que haya problemas si otras computadoras estan intentando conectarse al cliente con el mismo puerto?.. bueno, creo que eso hace...

como le podria hacer?  ;D

SKL (orignal)

emmmmm, escuchaste hablar de multiconexiones???

osea el messenger, el irc, y todos los chat usan el mismo puerto, y hay miles de usuarios conectados a 1 servidor...

con un multisocalo estaria andando bien...

sl2

Proxy Lainux

#2
hola

gracias por la respuesta.. busque y encontre que la api Csocketr plus era buena para crear multiconexiones... pero tengo varias dudas, haber si me pueden ayudar... que signiica esto...

bueno.. primero asi esta declarado la api

Private WithEvents spClient as CSocketPlus

Set spClient = new CSocketPlus..

en esto no hay problema... solo para que me puedan ayudar mejor... esto es lo que no entiendo...

spClient.ArrayAdd...

spClient.Connect strIndex , spClient.LocalIP(strIndex), txtPort...

strIndex (esto es de un listbox)...

pero este es el cliente... y si yo kisiera hacer el troyano de conexion inversa... el cliente debe permanecer asi? spClient.LocalIP(strIndex) ... o tendria que colocarle pClient.RemoteHostIP(strIndex)?... y en el server casi esta escrito de la misima forma

spServer.Bind strIndex, txtport, spServer.LocalIP(strIndex)... aqui me imagino que para hacerlo de conexion inversa debo cambiarlo asi no?... spServer.RemoteHostIP(strIndex) o que deberia de hacer?

spCliente.Tag...

que significa eso.. o de que forma sirve... lo que pasa es que quiero crear algun codigo parecido, pero si quiero usar esa api necesito saber como funciona lo mas que se pueda... y no me gusta hacer algo sin haber entendido lo mas posible lo que intento hacer...

y lo mas importante.. como es que esta api logra crear multiconexiones son un solo puerto?... que hace la api o el socket para conectar varias conexiones desde una sola conexion?.. realmente no entiendo que se logra hacer eso.. por lo mientras buscare informacion en google, pero i puedan diganme porfavor...  ;)

espero me puedan ayudar... gracias  ;D

SKL (orignal)

existe una clase llamada CSocketMaster echa por un pariente mio (creo) que utiliza multiconexiones, buscala en planetsourcecode.

Proxy Lainux

hola de nuevo..

el codigo lo encontre en un link del foro... el link me llevo a planetsourcecode y alli encontre el como crear multiconexiones... pero no tiene explicaciones...

yo antes habia manejado la api de winsock CSocketMaster.... por esa razon logre enter casi todo.. el problema es que en la otra api nunca utilice ArrayAdd o Tag..etc y quisiera que alguien que sepa me pueda decir para que funcionan esas funciones que no entendi y que mencione anteriormente...

creo que, lo que mas me interesa es saber porke tanto el cliente como el server se les tiene que dar la direccion IP... y como hacerlo de conexion remota... ya que en los ejemplos se les coloca a los dos LocalIP, en esta parte yo pienso que lo hicieron porke se va a ejecutar en una misma computadora... pero para hacerlo remoto, para mi lo mas obvio seria colocarle al server RemotehostIP... y poner al cliente a la escucha... pero porke lo dos necesitan una ip?... miren

server


Dim strIndex As String
strIndex = lstServer.List(lstServer.ListIndex)
spServer.Bind strIndex, txtPort, spServer.LocalIP(strIndex)
spServer.Listen strIndex
ShowInfo
Exit Sub



cliente


Dim strIndex As String
strIndex = lstClient.List(lstClient.ListIndex)
spClient.Connect strIndex, spClient.LocalIP(strIndex), txtPort.Text
ShowInfo


y alguien sabe para que es esto?


spClient.ArrayAdd -----> para que es ArrayAdd?
spCliente.Tag  -------> para que es el .tag?


nos vemos  ;)

cobein

El ArrayAdd es para agregar un Socket, los maneja al estilo coleccion.

Te recomiendo bajarte los ejemplos de PSC y mirarlos ahi esta muy claro como funciona.
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Proxy Lainux

hola

encontre este codigo en el foro... y tengo una duda, miren.. esto lo que hara es que el server se conecte al cliente  y despues el cliente creara un nuevo socket para continuar conectando varias conexiones remotas con la misma ip y el mismo puerto como lo haria bisfrost, cierto?

cliente



Private Sub ws_ConnectionRequest(index As Integer, ByVal requestID As Long)
On Error Resume Next
If index = 0 Then 'si index es 0
TotalIndex = 0 'Definimos la varible TotalIndex.
Else 'Si no
TotalIndex = TotalIndex + 1 'Definimos la varible TotalIndex.
End If 'Cerramos if
WS(index).Close 'Cerramos conexion
WS(index).Accept requestID 'Y aceptamos la conexion
Load WS(index + 1) 'Cargamos un nuevo index
WS(index + 1).LocalPort = 36 'y asignamos el puerto 36
IndexAbir = index + 1 'Definimos la varible IndexAbir.
WS(IndexAbir).Listen 'Escuhamos el puerto asignado.
End Sub


servidor

y el server podria hacerlo normalmente com Csocketmaster, cierto... ya que lo unico que hara sera intentar conectarse al cliente.. no??


Private Sub Timer1_Timer()
On Error Resume Next 'Si hay algún error salta a la siguiente línea.
If ws.State <> 7 Then 'Si estas descontado.
ws.Close 'Cerramos la conexión.
ws.Connect ip, port 'Y nos conectamos
Timer2.Enabled = True 'Desbloqueamos el timer2.
End If 'Cerramos el if
End Sub


espero su respuesta... gracias  ;D

K-19

Hombre siempre puedes probarlo tu mismo sin necesidad de esperar una respuesta no? Además si lo has cojido de un papper de este foro te aseguro que si, funciona.

Proxy Lainux


oigan no se enojen, yo en ningun momento dude del codigo que se ha posteado en el foro de multiconexion... solo pedi que me dijeran si uds concideraban que yo habia entendido bien cual es la parte con la que se logra la multiconexion ya que es la primera vez que lo uso... y como encontre varias formas de multiconexion, me habia confundido un poco.

y si coloco, "espero su respuesta"... no lo hago para que me tengan que contestar a fuerza, ya que como todos sabemos nadie esta obligado a contestar, es solo una forma de decir, quien me puede ayudar... y nadamas...

pero bueno.. gracias por las respuestas..  :)

juancho77

Mira, lo mas sencillo y practico que podes hacer es:
En el form_load cargas una instancia del socket. Cuando este recibe conexion y es exitosa, haces un load y cargas otro socket al array. Y asi sucesivamente, podes hacer ilimitadas conexiones siempre en el mismo puerto, mismo ip, mismo todo  :).
Sino sabes como agregar elementos al array, te paso un pedazo de codigo, pero no se si hace falta. SIno tambien podes buscar informacion sobre el CSocketPlus, ya que el Csocketmaster tradicional no permite hacer arrays de elementos.
Un abrazo.