Avatar billede silverwolf2001 Nybegynder
29. juni 2002 - 20:46 Der er 10 kommentarer og
1 løsning

Winsock skipper data

Dav

Jeg forsøger at lave en ftp client, jeg har så lavet dette kode.


If Not Winsock1.State = sckClosed Then
  Winsock1.Close
      Do Until Winsock1.State = sckClosed
        DoEvents
      Loop
End If

Winsock1.Connect "127.0.0.1", 21"

End Sub

Den connecter, den modtager også det komme ind i denne

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim sData As String
 
  Winsock1.GetData sData, vbString
 
  If Left(sData, 3) = "227" Then
        StatusBar.SimpleText = "Going to Passive Mode"
        MsgBox ("fdsfs")
  End If
 
  txtlog.Text = txtlog.Text & sData
 

 
  Select Case Left(sData, 3)
       
        Case "200"
            StatusBar.SimpleText = "Setting Type"
       
        Case "220"
            Winsock1.SendData "user " & txtUsername.Text & vbCrLf
            Winsock1.SendData "pass " & txtPassword.Text & vbCrLf
            Winsock1.SendData "rest 100" & vbCrLf
            Winsock1.SendData "rest 0" & vbCrLf
            Winsock1.SendData "type A" & vbCrLf
            Winsock1.SendData "PASV" & vbCrLf
            Shape1.BackColor = "&H0000FF00&"
           
           
        Case "227"
            MsgBox ("fgdsfdfsfdfdfdoguoggousd")
           
        Case "230"
            StatusBar.SimpleText = "Loggin In..."

        Case "350"
                 
        Case "530"
            StatusBar.SimpleText = sData
           
  End Select
 
    txtlog.SelText = strMessage & vbCrLf
    txtlog.SelStart = Len(txtlog.Text)
 
End Sub


Problemet er at, når case f.eks. når jeg har skrevet pasv mode til servere, så får jeg et svar tilbage med 227 som start. Desværre så kommer det svar aldrig, men jeg modtager, men case finder det ikke.

det er meget underligt, det er lige som om at den køre det for hurtigt igemmen, når left(sdata,3) ikke når jeg køre linjerne igemmen, og når at lave en case på forskellige kommandoer.

Hvad kan der være galt?
Avatar billede _just4fun_ Nybegynder
29. juni 2002 - 22:17 #1
Jeg sad engang og bixede med noget der minder om det:
Man kan ikke være sikker på at en besked kommer 'for sig selv'. Så man bliver nødt til at betagte de data der kommer ind som en datastrøm, og så selv finde linebreaks, eller \0 hvad enden af en besked er.
Det jeg gjorde var at når der kom data ind proppede jeg det i enden af en global string, og testede så for, om der var en delimiter (i mit tilfælde \0, i dit linebreak. ). Når der var det, kunne jeg være sikker på at jeg havde en komplet linje, og den kunne så fjernes fra den globale string.
... Jeg kan bare ikke helt se om det løser dit problem, men tænkte at det måske kunne hjælpe.
Avatar billede jespernaur Nybegynder
29. juni 2002 - 22:18 #2
Du siger at du får noget som svar, men hvad er det? Har du prøvet at skrive det ud?
Avatar billede silverwolf2001 Nybegynder
29. juni 2002 - 22:33 #3
220 T h e  B o x (glftpd 1.26_Linux) ready.
331 Password required for silverwolf.
230- Welcome to my home ftp
230 User silverwolf logged in.
350 Restarting at 100. Send STORE or RETRIEVE to initiate transfer.
350 Restarting at 0. Send STORE or RETRIEVE to initiate transfer.
200 Type set to A.
227 Entering Passive Mode <127,0,0,1,143,84)

Jeg får aldrig en vbcrlf på linje 227. eller på 350, eller 200
Avatar billede silverwolf2001 Nybegynder
29. juni 2002 - 22:33 #4
som just4fun siger, så kommer ikke nogle end på linjerne
Avatar billede _just4fun_ Nybegynder
29. juni 2002 - 23:02 #5
eeeh, nu ser jeg lige det er en linux... mon ikke den kun sender lf chr(13) eller cr chr(10). Og grunde til at det virker med alle de andre er at de kun kommer en linje ad gangen (200 og 227 kommer sikkert delt af enten chr(10) eller chr(13))
Avatar billede silverwolf2001 Nybegynder
29. juni 2002 - 23:21 #6
Hvordan kan en kode evt. se ud?

Jeg er ikke god til at trække data ud af stirngs
Avatar billede _just4fun_ Nybegynder
29. juni 2002 - 23:36 #7
--- Den kommer lige fra hoften:
'*************************************
'* globalt erklærede vars
'*************************************
dim myInputstream as string
dim delim as string

'*************************************
'* winsock eventhandler for  DataArrival
'*************************************
Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
  Dim sData As String
  Dim eoLine as long
  delim = chr(13)
  Winsock1.GetData sData, vbString
  myInputstream = myInputstream & sData
  eoLine = instr(myInputstream, delim)
  If eoLine = 0 then exit sub
  myLine = left(myInputstream, eoLine-len(delim))
  myInputstream = right(myInputstream, len(myInputstream) - eoLine)
'....... Brug myLine herefter....
Avatar billede silverwolf2001 Nybegynder
30. juni 2002 - 00:08 #8
Det virker, jeg havde nær aldrig kommet gemmen login igen :o)  8havde sat msg box til pr. linje )
Avatar billede silverwolf2001 Nybegynder
30. juni 2002 - 00:08 #9
Tak igen ;o)
Avatar billede silverwolf2001 Nybegynder
30. juni 2002 - 00:12 #10
Nu sker der bare det at shittet laver enter for mange gange ud til min log
Avatar billede silverwolf2001 Nybegynder
30. juni 2002 - 00:41 #11
ok

Der er en lille bug hvis du har tid, når jeg modtager 230 ( velkom besked ), så foresætter den ikke, den modtager kun 1 pakke, så den kommer aldrig videre. Hvordan får jeg den til at blive ved med at modtage pakker?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester