Wisock - Hacer que no se quede con un solo cliente

Iniciado por Brian1511, 12 Agosto 2013, 07:33 AM

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

Brian1511

Hola a todos amigos pues aqui me vengo a explicar.

Tengo tiempo con una idea en la mente realmente simple, es crear un juego winsock especialmente de batallas con cartas , algo simple lo que me inspiro fue Ani dimension lo mejor que visto en mi vida de verdad que si!.

Bien volviendo al tema, quiero saber como crear un servidor que escuche en el mismo puerto pero que se use de Sala .

Me explico:

Quiero que el servidor actue como una room donde estan todos los usuarios y de hay los usuarios elijen con quienes quieren batallar .

Esto es todo espero que me puedan ayudar hasta la proxima.
Haa y acepto comententarios y/o ayudas con el tema del juego.
:D :D



Creador de BrainMind

engel lex

ya que el puerto solo puede escuchar una comunicación única por el puerto te recomiendo usar "división de tiempo"

si un usuario se conecta un nuevo lo guardas en una lista (array) de usuarios, luego vas pasando el "token" entre los usuarios es decir, le envías que es su turno, el se comunica, cierras con el, vas al siguiente de la lista, y así vas, cada quien tiene un turno para hablar

claro este método tiene un punto débil, es sensible a cantidad de usuarios y a retraso... es decir si tienes 10 usuarios con un ping de 200ms cada uno, un usuario solo vería actualización cada 2 segundos

mi recomendación es usar varios puertos

reservas un lote de puertos (ej. del 100 al 200)
y usas 1 puerto de conexión, el usuario se conecta y le envías que puerto le toca (ej el puerto 105), entonces abres el puerto 105 en modo escucha (listen) y el usuario abre la conexión para entrar por ahí y ahí manejas los datos... defecto de este método, un servicio puede usar inesperadamente un puerto bloqueándolo, y que tienes un limite de usuarios definido por la cantidad de puertos


espero que te sirva de algo mi info :P
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

noalg

bueno en cierto modo deberias hacer lo que dijo engelx pero no estrictamente, en el servidor debes poner un socket escuchando en un puerto x, cada vez que un cliente intenta conectarse a tu servidor por ese puerto x, debes crear otro socket, probablemente almacenar todos estos sockets en un array, no es necesario usar mas que un puerto.
Una vez realizada la conexion, y empieces la partida tienes dos opciones, conseguir que ambos clientes se conecten entre ellos (cliente <-> cliente) o (cliente <-> servidor <-> cliente). La segunda es obviamente mas lenta, pero para un juego de cartas que no creo que sea muy rapido ni que necesites enviar mucha informacion por lo que puedes elegir la segunda opcion.

No es exactamente lo que tu quieres pero establece multicobexion, hechale un vistazo que te aclarara cosas:
http://www.indetectables.net/viewtopic.php?p=34880
::¿*¿---//&$#\\---▶{}◀---//#$&\\---?*?::


¡¡¡NO PINCHES AQUI SI NO QUIERES INFECTARTE CON UN VIRUS!!!

Brian1511

gracias a todos por contestar de verdad que me gustan sus respuestas explican muchas cosas.

Probe el link que me dio noalg y me gusto el ejemplo pero realmente quiero saber como puedo hacelo de otra manera este tiene como 5 errores...


Pero bueno espero que me puedan contestar con algo mas explicativo..

Un saludo y muchas gracias!



Creador de BrainMind

noalg

Creo que aqui vendra todo mejor explicado, no solo la multiconexion sino todo lo relaccionado con sockets. No tengo tiempo ni estoy en mi ordenador para hacerte un ejemplo yo personalmente, espero que te sirva

http://monografias.com/trabajos30/tutorial-visual-basic/tutorial-visual-basic.shtml

Intenta empezar a codearlo y si no te funciona vuelve con las dudas y partes de codigo erroneo.
::¿*¿---//&$#\\---▶{}◀---//#$&\\---?*?::


¡¡¡NO PINCHES AQUI SI NO QUIERES INFECTARTE CON UN VIRUS!!!

Brian1511

Gracias nolag esta perfecto , voy a hacer lo que me escribes empesare a crearlo y pues si tengo algun error o duda pues la diga..

Gracias y un saludo!



Creador de BrainMind

DarkMatrix

En el ejemplo que te pase no hace mucho esta lo que quieres hacer, al menos algo parecido, hablamos de un chat multi-usuarios con posibilidad de mensajes privados estre usuarios, lo que tu llamas salas (conexion entre 2 o mas clientes independiente de los demas clientes conectados al servidor) es lo mismo que el sistema de whispers (chat privados) que usan en el ejemplo.

Un cliente le indica al servidor que quiere empezar un chat privado con otro usuario (independiente del chat general), para esto el servidor necesita saber con que usuario quiere empezar el chat y de este modo poder redirigir los mensajes de un cliente a otro, siendo el servidor un intermedio de comunicacion. Tal y como te comento el usuario @noalg en este caso es una comunicacion del tipo (cliente <-> servidor <-> cliente).

En el ejemplo, cada cliente ya tiene la lista de usuarios que estan conectados al sevidor, por lo que el usuario selecciona con quien quiere empezar el chat privado y le envia al servidor el nick del usuario y el mensaje que quiere enviarle.. El servidor agarra estos datos, busca en que sock esta conectado el usuario con el nick especificado y redirige el mensaje hacia ese sock...

Cliente1 -> Servidor = ChatPrivado(NickCliente1,NickCliente2,Mensaje)
Servidor Analiza el paquete y busca en que sock esta conectado NickCliente2 cuando lo encuentra entonces redirige los otros 2 datos, que son el NickCliente1 y el mensaje...
Servidor -> Cliente2 = ChatPrivadoRecibido(NickCliente1,Mensaje)

Cita de: DarkMatrix en 16 Diciembre 2012, 02:35 AM
Sabes este ejemplo te ayudara mucho: http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=60099&lngWId=1

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix

Brian1511

DARK eres mi heroe , en serio Lo digo tus aportes son 100pre utiles y responden a mis dudas.

una dudita mas,podria utilizarlo a la hora de hacer los lobbis?
usar esa mismA tecnica?



Creador de BrainMind

DarkMatrix

Si puedes, en el ejemplo seria como tener varias salas de chat generales...

Todo aquello que no se puede hacer, es lo que no intentamos hacer.
Projecto Ani-Dimension Digital Duel Masters (Juego de cartas masivo multijugador online hecho en Visual Basic 6.0)

Desing by DarkMatrix