USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  Erro: subscript out of range
Rafael_Oliveira
DIADEMA
SP - BRASIL
ENUNCIADA !
Postada em 23/11/2011 09:11 hs            
galera... tenta me ajudar por favor...
Estou com este erro aqui... "subscript out of range"
Mas não estou de geito nenhum conseguinto achar onde esta o erro...

Segue a linha de codigo...
 
Private Sub objWinSock_DataArrival(ByVal bytesTotal As Long)
     Dim i As Integer
     Dim oString As String
     DoEvents:
     Dim bs() As Byte       'Variável de Array de Bytes
     ReDim bs(bytesTotal)   'Redimenciona a array com a quantidade de byte que veio
   
     'Espera o objWinSock se conectar ... status de conectado = 7
     Do While objWinsock.State <> 7
     DoEvents:
     Loop
    
     'Lendo e esperando os bytes
     objWinsock.GetData bs, vbByte, bytesTotal
    
     'Loop para checar os comandos do TELNET
     i = 0
     oString = vbNullString     'Limpa a String
     'Enquanto "i" for menor que a quantidade total dos bytes execute
     While i < bytesTotal
        'Está parte do código é onde ele lê e traduz os bytes
        'recebido no telnet
        'parte crucial onde vc fica sabendo
        'o que está acontecendo no TELNET
        If bs(i) = TELCMD_IAC Then  ========>>>> O erro esta aqui no bs(i)
            i = i + 1
            Select Case bs(i)
                Case TELCMD_IAC:    'Não é um comando
                    oString = oString + Chr(TELCMD_IAC)
                Case TELCMD_SB:     'Sub Opções
                    i = i + 2
                    If bs(i - 1) = TELOPT_TTYPE Then
                        objWinsock.SendData Chr$(TELCMD_IAC) + Chr$(TELCMD_SB) + Chr$(TELOPT_TTYPE) + Chr$(TELQUAL_IS) + "TTY" + Chr$(TELCMD_IAC) + Chr$(TELCMD_SE)
                    End If
                Case TELCMD_SE:     'Fim das Sub Opções
                Case TELCMD_DO, TELCMD_DONT, TELCMD_WILL, TELCMD_WONT:
                    i = i + 1
                    Select Case bs(i)
                        Case TELOPT_BINARY, TELOPT_TTYPE, TELOPT_ECHO:  'Caso aceite está opção
                            If bs(i - 1) = TELCMD_DO Then
                                objWinsock.SendData Chr$(TELCMD_IAC) + Chr$(TELCMD_WILL) + Chr$(bs(i))
                            Else
                                objWinsock.SendData Chr$(TELCMD_IAC) + Chr$(TELCMD_DO) + Chr$(bs(i))
                            End If
                        Case Else:  'Caso Rejeite
                            If bs(i - 1) = TELCMD_DO Then
                                objWinsock.SendData Chr$(TELCMD_IAC) + Chr$(TELCMD_WONT) + Chr$(bs(i))
                            Else
                                objWinsock.SendData Chr$(TELCMD_IAC) + Chr$(TELCMD_DONT) + Chr$(bs(i))
                            End If
                    End Select
            End Select
        Else
            'Tudo que for saida
            oString = oString + Chr(bs(i))
        End If
        i = i + 1
     Wend
    
     'Verifica se está esperando Usuário
     If mStatus = RSH_ESPERA_LOGAR Then
        If Right(oString, Len(mUsuarioProcura) + 1) = mUsuarioProcura Then
            objWinsock.SendData mUsuario + Chr(10) 'Envia Usuario
            mStatus = RSH_ESPERA_SENHA
        End If
     'Verifica se está esperando Senha
     ElseIf mStatus = RSH_ESPERA_SENHA Then
        If Right(oString, Len(mSenhaProcura) + 1) = mSenhaProcura Then
            objWinsock.SendData mSenha + Chr(10) 'Envia senha
            mStatus = RSH_ESPERA_NADA
        End If
     End If
       
     'Caso ocorra erro enviar para que chamou
     If oString <> vbNullString Then
        RaiseEvent Result(oString)
     End If
End Sub
   
PH1959
Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
ENUNCIADA !
Postada em 23/11/2011 10:04 hs            
1 - da um debug e verifica em q linha esta parando.
2 - verifique o valor q a sua variavel bs assume e depois posta aki
   
Rafael_Oliveira
DIADEMA
SP - BRASIL
ENUNCIADA !
Postada em 23/11/2011 10:46 hs            
Entao... é nessa linha aqui If bs(i) = TELCMD_IAC Then 
O valor que entra na variavel bytesTotal é 37
   
PH1959
Pontos: 2843
SÃO JOSÉ DOS CAMPOS
SP - BRASIL
Postada em 23/11/2011 10:58 hs            
entao.... da uma verificada .... em algum lugar aí o valor de seu contador "i" está ultrapassando o valor da variavel bytestotal
     
Rafael_Oliveira
DIADEMA
SP - BRASIL
Postada em 23/11/2011 10:58 hs            
Galera... nao sei se tem algo haver... mas... eu retirei o DoEvents da linha abaixo e funcionou... nao sei pq... mas nao da mais o erro... =O
 
Dim i As Integer
     Dim oString As String
     DoEvents:
     Dim bs() As Byte       
     ReDim bs(bytesTotal)  
     
Treze
não registrado
ENUNCIADA !
Postada em 25/11/2011 18:31 hs   
vc pode até deixar o doevents, desde que não coloque os dois pontos após o mesmo.
   
Página(s): 1/1    


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página