winsock. No activa evento error

fangosto
15 de Octubre del 2004
Estoy haciendo un programa para bajarme a una BD los correos de cuentas POP. En una de las pruebas he forzado la contraseña incorrecta y he detectado que no se activa el evento error a pesar de enviarme como dato una cadena que empieza por -ERR. Os pongo un código reducido de ejemplo a ver si alguien me dice dónde está el error. Gracias de antemano.

'Objetivo: Obtener el numero y tamaño de los mensajes en un servidor POP
'Basado en un ejemplo de Jesús Fernando Beltrán Rodríguez ([email protected])
'encontrado en los foros de www.programacion.com
'Form sólo contiene u control winsock, llamado wnsWinsock, y un botón con nombre cmdCorreo

Option Explicit
Enum TResp 'Estas son mis banderas de flujo de programa, veras que efectivas
vlEsperando
vlOk
vlErr
End Enum

Dim vgRespuestas As TResp 'Mi variable de control para el flujo de mi programa

Private Sub cmdCorreo_Click()

If wnsWinsock.State <> 0 Then 'Si el socket no esta cerrado esperamos a que cierre
wnsWinsock.Close
Do
DoEvents
Loop Until wnsWinsock.State = 0
End If
'Inicializamos el Winsock y lo conectamos
wnsWinsock.RemoteHost = "pop.eresmas.com" 'Pon tu servidor POP
wnsWinsock.RemotePort = 110 'Puerto 110, es donde regularmente esta el servicio de POP
wnsWinsock.LocalPort = 0 'Si ponemos 0 el control Winsock lo asigna automáticamente
wnsWinsock.Connect
Debug.Print "Conectando..."
vgRespuestas = vlEsperando
Do While vgRespuestas = vlEsperando 'Esperamos una respuesta en los eventos del Winsock
DoEvents
Loop
If vgRespuestas = vlErr Then
MsgBox "ha ocurrido un error al intentar conectar con el servidor", vbExclamation
wnsWinsock.Close
Exit Sub
End If
vgRespuestas = vlEsperando

'Mandamos el nombre de usuario
'En lugar de fangosto pon tu nombre de Usuario
wnsWinsock.SendData "USER " & "fangosto" & Chr(10)
Debug.Print "Comprobando Usuario..."
Do While vgRespuestas = vlEsperando 'Esperamos una respuesta
DoEvents
Loop
If vgRespuestas = vlErr Then
MsgBox "Nombre de usuario incorrecto.", vbExclamation
wnsWinsock.Close
Exit Sub
End If
vgRespuestas = vlEsperando

'Esta correcto el usuario, mandamos la contraseña
wnsWinsock.SendData "PASS " & InputBox("Tu contraseña:", "Contraseña") & Chr(10)
Debug.Print "Comprobando contraseña..."
Do While vgRespuestas = vlEsperando 'Esperamos una respuesta
DoEvents
Loop
If vgRespuestas = vlErr Then
MsgBox "Contraseña incorrecta.", vbExclamation
MsgBox wnsWinsock.State, vbExclamation, "Error"
wnsWinsock.Close
Exit Sub
End If
vgRespuestas = vlEsperando

'Cerramos la conexión
wnsWinsock.Close
Debug.Print "Desconectado"
End Sub

'Este evento ocurre cuando el winsock puede conectarse a su destino
Private Sub wnsWinsock_Connect()
vgRespuestas = vlOk
End Sub

Private Sub wnsWinsock_DataArrival(ByVal bytesTotal As Long)
Dim strData As String
If wnsWinsock.State <> 7 Then
Exit Sub
End If
wnsWinsock.GetData strData, vbString
Debug.Print strData
If Mid(strData, 1, 3) = "+OK" Then
Debug.Print "Voy bien"
vgRespuestas = vlOk
ElseIf Mid(strData, 1, 4) = "-ERR" Then
vgRespuestas = vlErr
Debug.Print "Ha habido error"
Else
vgRespuestas = vlEsperando
End If
End Sub

Private Sub wnsWinsock_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)
vgRespuestas = vlErr
'¿Por qué no pasa por aquí? ***************************
End Sub

MAX
15 de Octubre del 2004
hola
el evento error del winsock se produce cuando ocurre
un error en la coneccion y no cuando tu dices
forzar una contraseña invalida y el servidor te envia
un mensaje de error

fangosto
15 de Octubre del 2004
Gracias MAX.

Ya me extrañaba a mí que en todos los ejemplos que pillaba en internet todo el mundo se dedicara a controlar el error manualmente.

Aunque no influía en mi programa porque tengo la contraseña fija, sí que me interesaba saber el por qué.

Ya casi tengo acabado el programa. Sólo me falta la parte de guardar ficheros adjuntos.