Normas del foro

Curso Hacker
Bienvenido(a), Visitante. Favor de ingresar o registrarse.
¿Perdiste tu email de activación? - Noviembre 23, 2008, 02:22:34
Inicio Ayuda Ingresar Registrarse
Visita: Articulos - Juegos Gratis - Da Foros

Comunidad Underground Hispana  |  Programacion  |  Programación  |  Visual Basic y Net (Moderador: ANYD00M)  |  Tema: Problemas con winsok 0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Ir Abajo Imprimir
Autor Tema: Problemas con winsok  (Leído 223 veces)
deimos_rasiv
Miembro
*****
Desconectado Desconectado

Mensajes: 94


deimos_rasiv@hotmail.com
Ver Perfil Email
« en: Mayo 09, 2008, 09:03:14 »

hola a todos

estoy trabajando en un mensajero NO en un chat, la idea de esto es que mi maquina mande un mensaje a una o a varias maquinas, estan lean el mensaje y listo, que no respondan.
ahora, se supone que devo tener un cliente y un servidor, vien yo soy elservidor
y mi amigo es el cliente (el resivira el mensaje)

la idea ba como esto

servidor
inicio
preciona una tecla programada ej(f12)
programa
lee mensaje ya escrito desde un archivo
lee ip de maquina desde un archivo
lee el puerto al cual se conectara desde un archivo
establece ip de maquina
establece puerto
establece coneccion
envia mensaje
fin

cliente
inicio
lee el puerto por el  cual escuchara desde un archivo
establece puerto
establece coneccion
escucha
si hay conexcion
lee el mensaje
lo envia a un from acompañado de un sonido continuo
si preciona aceptar  (que es la unica tecla que tendra)
borra el contenido de from
cierra coneccion
termina el sonido
oculta el from
vuelbe a escuchar (a la espera de otro mensaje)
fin

el problema de esto es que no me funca con winsock, al parecer el cliente trabaja mas rapido que el servidor  puesto que si lo ejecuto en forma de diseño (f8) paso a paso funciona sin problemas pero si hago click en el boton play para que se ejecute en forma fulida me da error


Error en tiempo de ejecución: 40.006
Protocolo o estado de conexión erróneo para la transacción o petición solicitada

Pero si lo corro con F8 se ejecuta sin problema, también si detengo el programa justo antes de mandar el mensaje, y presiono F8 en la línea winsock.SendData (linea2) este se ejecuta bien.

Causa
Este problema se produce debido a un error en el control Winsock Aunque la aparición de este problema depende del flujo de datos entre dos entidades, el problema puede producirse más a menudo cuando la aplicación cliente (receptor) es mucho más lenta que la aplicación servidor (transmisor) y cuando no está implementado ningún control de flujo de nivel de aplic

Solución

Para resolver este problema, consiga la última versión de Service Pack para Microsoft Visual Studio 6.0. Para obtener más información, visite el siguiente sitio Web de Microsoft Developer Network (MSDN)


Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion (
Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion)



Esto ya lo baje, ya lo instale, pero el problema persiste

Alguien me puede echar una manito con esto?

desde ya muchas gracias

En línea
ANYD00M
Moderadores
Colaborador
*****
Desconectado Desconectado

Mensajes: 746


.:Beethoven's Count:.

maxigile_tl@hotmail.com
Ver Perfil WWW Email
« Respuesta #1 en: Mayo 09, 2008, 10:26:12 »

El error es que el Winsock no esta preparado para hacer alguna tarea... Suponete que quieres enviar un archivo que contiene el mensaje que el servidor le manda al cliente, si el cliente no esta conectado al servidor en ese momento no podras enviarlo, alli el error que te sale:
La solucion seria no enviar el archivo hasta que el cliente se abra (y se establesca la conexion con el servidor), pero para esto deberias tener el servidor corriendo en tu pc todo el dia y usar un timer (por ejemplo) para que cada cierto tiempo verifique el estado de cada uno de los clientes y si esta conectado mande el mensaje...

Lo mas "sutil", lo ideal y lo que usan muchos mensajeros, es tener un servidor (un host, una pc que almacene datos), y que cada vez que el servidor quiera mandar un mensaje envie un archivo, suponete: "Mensaje.txt" al host y lo guarde.
Despues en el clientes debes poner un evento que ocurra cuando se abre el mismo y cada cierto tiempo lea los archivos del host y si encuentra alguno nuevo lo baja a la pc donde esta el cliente (del usuario) y lo muestra..

En caso de que el cliente no lo hallas hecho tu, suponte que sea Outlook; puedes poner en tu pc o en alguna pc un servidor smtp y enviar el mensaje a travez de él (las funciones para usar smtp son muy simples)...

Salu2

EDITO: si no me equivoco el error tambien puede ser que quieras desconectar el servidor sin estar conectado; usa u "If" para saber el estado de la conexion...

Y tambien es necesario que rebices el codigo y pongas, donde sea necesario algun DoEvents, para darle tiempo a la aplicacion... Por lo que decias sobre que si corrias paso por paso te funcionaba...
« Última modificación: Mayo 09, 2008, 10:29:12 por SOADER (ANYD00M) » En línea


Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
deimos_rasiv
Miembro
*****
Desconectado Desconectado

Mensajes: 94


deimos_rasiv@hotmail.com
Ver Perfil Email
« Respuesta #2 en: Mayo 09, 2008, 01:59:30 »

te coloco el codigo del servido  que obiamente siempres esta listo escuchando, y el del cliente para que lo veas
en todo caso incluso lo probe con un time de 1000 y 10000 pero nunca funco

si me ayude a solucionarlo, te ganas un premio!! y es real !!

saludos cordiales


servidor
--------------------------------------------------------------------------------------------------
Private Sub btnAcepta_Click()
Lblrecive = ""
End Sub
--------------------------------------------------------------------------------------------------
Private Sub Form_Load()
'establecemos el puerto a conectar
Winsock1.LocalPort = "2103"
'Nos ponemos a escuchar
Winsock1.Listen
End Sub
--------------------------------------------------------------------------------------------------
Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
   'Si el winsock está abierto lo cerramos.
If Winsock1.State <> sckClosed Then Winsock1.Close
    Winsock1.Accept requestID 'Aceptamos la conexión
 End Sub
--------------------------------------------------------------------------------------------------
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
 Dim Mensaje As String
    Winsock1.GetData Mensaje
    Lblrecive = Mensaje
  End Sub
--------------------------------------------------------------------------------------------------
Private Sub Winsock1_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
'Si ocurre un error, cerramos y volvemos a escuchar.
Winsock1.Close
Winsock1.Listen
End Sub
--------------------------------------------------------------------------------------------------
Private Sub Winsock1_Close()
'Si se cierra la conexión, volvemos a escuchar.
Winsock1.Close
Winsock1.Listen
End Sub
--------------------------------------------------------------------------------------------------


cliente
--------------------------------------------------------------------------------------------------
Dim Conectado As Boolean
--------------------------------------------------------------------------------------------------
Private Sub Form_Load()
If conectadado = False Then
    Winsock1.Connect ("127.0.0.1"), (2103)
    Winsock1.SendData "Estamos probando"
End If
End Sub
--------------------------------------------------------------------------------------------------



En línea
ANYD00M
Moderadores
Colaborador
*****
Desconectado Desconectado

Mensajes: 746


.:Beethoven's Count:.

maxigile_tl@hotmail.com
Ver Perfil WWW Email
« Respuesta #3 en: Mayo 09, 2008, 04:11:13 »

Como ya te dije, si envias el mensaje sin que el servidor halla establecido conexion con el cliente y viceversa, te enviara error...

En el cliente agrega esta linea:

If Winsock1.State = 7 then
    Winsock1.SendData "MENSAJE"
end if

esto iria debajo de:

winsock1.Connect 127.0.0.1, 2103

Esto hara que despues de intentar conectar compruebe si se pudo conectar o no; ya que no sabes si el servidor estara conectado o no...

Y por las dudas, quitale las comillas a los datos numericos como lo son la IP y el puerto (creo que no cambiara nada, pero es lo mejor)

Ademas seria bueno que no pongas esto en el evento load del form, ponlo en un boton, ya que sino son muchas prisas para el programa.

Salu2

EDITO: No es necesario que ofrescaz regalos, aqui estamos para ayudar en todo lo que podamos, creo que no cambiara nada. De igual modo es un buen gesto, pero (nose si esta era tu intencion) no intentes llamar la atencion poniendo cosas asi para que te ayuden, si pueden te ayudaran igual y si no pueden quiza puedan dejarte algun link informativo o algo...
« Última modificación: Mayo 09, 2008, 04:13:05 por SOADER (ANYD00M) » En línea


Necesitas ser usuario para ver los enlaces Crear Usuario  Hacer Sesion
deimos_rasiv
Miembro
*****
Desconectado Desconectado

Mensajes: 94


deimos_rasiv@hotmail.com
Ver Perfil Email
« Respuesta #4 en: Mayo 10, 2008, 02:22:35 »

buenas compa    esta funcionando  impeque   Cheesy Cheesy Grin Grin

este es  le code que le meti   

Private Sub form_KeyDown(KeyCode As Integer, Shift As Integer)
If KeyCode = vbKeyControl Or KeyCode = vbKeyF6 Then
        ' MsgBox "Precionaste una tecla"
Winsock1.Close
Winsock1.Connect "127.0.0.1", "2103"
Do
DoEvents
If Winsock1.State = 7 Then
    Winsock1.SendData "Estamos probando"
End If
If Winsock1.State = 9 Then
    MsgBox "No Esta Conectado"
End If
Loop Until Winsock1.State = 7 Or Winsock1.State = 9
End If
End Sub


Private Sub Form_Load()
Form1.KeyPreview = True
End Sub


con esto esta funcando como nunca, ademas si te  das cuenta le asigne unas teclas en ves de un boton, estaba bien lo que me deicas al principio pero no te havia cachado

mil gracias y bueno lo del premio lo decia encerio, por lo demas esta disponible para usted

Aprobechando la oprtunidad....

estoy en el servidor y quiero que cuando reciba el mensaje sea acompañado de un sonido, en que formato? (wav, mp3) en forma de loop hasta que precione aceptar


estoy en investigacion   y vere que encuentro


si puedes echarme una mano otra ves bkn   

un abrazo !!  Deimos_Rasiv
 Cheesy Cheesy

En línea
deimos_rasiv
Miembro
*****
Desconectado Desconectado

Mensajes: 94


deimos_rasiv@hotmail.com
Ver Perfil Email
« Respuesta #5 en: Mayo 10, 2008, 03:53:08 »

arregle lo del sonido   para que quedara con un loop

lo posteare comno otro tema por si a alguien le sirve



saludos a todos
 Cheesy
En línea
Páginas: [1] Ir Arriba Imprimir 
Comunidad Underground Hispana  |  Programacion  |  Programación  |  Visual Basic y Net (Moderador: ANYD00M)  |  Tema: Problemas con winsok « anterior próximo »
Ir a:  


Ranking-Hits
Powered by SMF 1.1.7 | SMF © 2006-2007, Simple Machines LLC