Ayuda !!! Winsock Multi Puertos ¿? URGENTE!

Iniciado por Brian1511, 15 Diciembre 2012, 03:56 AM

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

Brian1511

Hola a todos como estan bueno he tenido un tiempito sin venir es que mi pc estaba dañada pero ya la he arreglado, bien mi duda es la siguiente:

Tengo un programa que estoy creando (Un chat multi-usuarios) la cual se conectan a un servidor , pero cuando voy a conectar otro cliente al servidor me salta un error es el siguiente:

Error : "40020" en tiempo de ejecucion:

Operacion no valida en el estado actual.


Bueno espero que me puedan ayudar si necesitan mas info o la parte del code en la que conecta y eso pues se los dare enseguida , repito porfavor ayudenme es importante! :-\





Creador de BrainMind

ignorantev1.1


BlackZeroX

#2
.
Usa el buscador, esto ya esta en otros Post.

Totorial Winsock

* Usa un poco de lógica, si te dice "Operacion no valida en el estado actual." entonces ¿Por que no rectificas el estado actual del socket y realizas dicha acción?, algunos casos que dan este problema son: El socket esta en escucha, enviando informacion, esta cerrado, etc.

En el evento Error del socket te saltan estas constantes.

Código (vb) [Seleccionar]


Constante                      Valor   Descripción
sckOutOfMemory                  7      Sin memoria
sckInvalidPropertyValue         380    El valor de la propiedad no es válido.
sckGetNotSupported              394    No se puede leer la propiedad.
sckSetNotSupported              383    La propiedad es de sólo lectura.
sckBadState                     40006  Protocolo o estado de conexión incorrecto para la solicitud o la transacción requerida.
sckInvalidArg                   40014  El argumento que se pasó a una función no estaba en el formato correcto o en el intervalo especificado.
sckSuccess                      40017  Correcto.
sckUnsupported                  40018  Tipo Variant no aceptado.
sckInvalidOp                    40020  La operación no es válida en el estado actual.
sckOutOfRange                   40021  El argumento está fuera del intervalo.
sckWrongProtocol                40026  Protocolo erróneo para la solicitud o la transacción requerida.
sckOpCanceled                   10004  Se canceló la operación.
sckInvalidArgument              10014  La dirección solicitada es una dirección de multidifusión, pero el indicador no está activado.
sckWouldBlock                   10035  El socket es no bloqueante y la operación especificada se bloqueará.
sckInProgress                   10036  Se está efectuando una operación de Winsock bloqueante.
sckAlreadyComplete              10037  Se completó la operación. No se están efectuando operaciones bloqueantes.
sckNotSocket                    10038  El descriptor no es un socket.
sckMsgTooBig                    10040  El datagrama es demasiado grande para el búfer y se truncará.
sckPortNotSupported             10043  El puerto especificado no es compatible.
sckAddressInUse                 10048  Dirección en uso.
sckAddressNotAvailable          10049  La dirección no está disponible en la máquina local.
sckNetworkSubsystemFailed       10050  Error en el subsistema de red.
sckNetworkUnreachable           10051  El host no puede encontrar la red en este momento.
sckNetReset                     10052  Expiró el tiempo de espera de la conexión antes de establecer SO_KEEPALIVE.
sckConnectAborted               10053  La conexión se ha cancelado al sobrepasar el tiempo de espera o por otro error.
sckConnectionReset              10054  La conexión se ha restablecido desde el lado remoto.
sckNoBufferSpace                10055  No hay espacio disponible en el búfer.
sckAlreadyConnected             10056  El socket ya está conectado.
sckNotConnected                 10057  El socket no está conectado.
sckSocketShutdown               10058  El socket se ha desactivado.
sckTimedout                     10060  Se ha sobrepasado el tiempo de conexión.
sckConnectionRefused            10061  Se ha forzado el rechazo de la conexión.
sckNotInitialized               10093  Es necesario llamar primero a WinsockInit.
sckHostNotFound                 11001  Respuesta autorizada: host no encontrado.
sckHostNotFoundTryAgain         11002  Respuesta no autorizada: host no encontrado.
sckNonRecoverableError          11003  Errores no recuperables.
sckNoData                       11004  Nombre válido; no hay registro de datos del tipo solicitado.



Dulces Lunas!¡.
The Dark Shadow is my passion.

BlackZeroX

#3
Ojo estos errores se solucionan usan los IF THEN ELSE END IF (Comprobar estados, por si te da weba buscar es la propiedad .state).

Código (vb) [Seleccionar]


Constante                     Valor      Descripción
sckClosed                      0         Predeterminado. Cerrado
sckOpen                        1         Abierto
sckListening                   2         Escuchando
sckConnectionPending           3         Conexión pendiente
sckResolvingHost               4         Resolviendo host
sckHostResolved                5         Host resuelto
sckConnecting                  6         Conectando
sckConnected                   7         Conectado
sckClosing                     8         El equipo está cerrando la conexión
sckError                       9         Error



Por ejemplo:

Código (vb) [Seleccionar]


Private Sub tcpServer_ConnectionRequest (ByVal requestID As Long)
  ' Comprueba si el estado del control es cerrado.
  ' De lo contrario, cierra la conexion antes de
  ' aceptar la nueva conexion.
  If tcpServer.State <> sckClosed Then _
    tcpServer.Close ' Si no hacemos esto y el socket esta conectado nos arrojara un error...

  ' Acepta la peticion con el parametro
  ' requestID.
  tcpServer.Accept requestID
End Sub



Dulces Lunas!¡.
The Dark Shadow is my passion.

Brian1511

Gracias amigos gracias , bueno heee a BlackZeroX (Astaroth)  amigo te envie un MP pero no sabia que habias contestado gracias por hacerlo , olvida ese mensaje probare lo que me pusiste ahora cualquier cosa te aviso!



Creador de BrainMind

DarkMatrix


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

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

Dark amigo , mi heroe gracias esto era lo que necesitaba eres el mejor , y gracias a todos los que me ayudaron .

Olle Dark una duda tu juego esta echo con Winsock o algo haci ?

y si no es molestia tabien podrias harme un ejemplo de como creaste tan fantastico inicio de sesion , lo he buscado por todas partes pero nada es inutil buscar y buscar , tambien lo he intentado pero he frecasado 1 y otra ves :( .

Espero que me puedas ayudar  y Muchisimaas Gracias! ;)



Creador de BrainMind

DarkMatrix

Pero a que te refieres con el inicio de sesion, con con el aspecto visual o el codigo para hacer login y eso?

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

#8
Si con el code y eso amigo el login como haces para que cuando te registres puedas inciar sision al juego con tus datos.

Me Explico :

Cuando abres el programa , vas a  iniciar sesion

pero para inciar sesion Debes estar registrado.

Los datos del registro se guardan en una base de datos de un servidor ?¿

Eso es lo que quiero saber como has echo ese login amigo ¿? , que por lo que veo es el mejor que he visto...

¿Tu juego esta echo con winsock?



Creador de BrainMind

BlackZeroX

Si es winsock... o una variante... pero a fin de cuentas es lo mismo.

Dulces Lunas!¡.
The Dark Shadow is my passion.