Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo utilizar winsock en VB para implementar la carga y descarga por ftp?

¿Cómo utilizar winsock en VB para implementar la carga y descarga por ftp?

Opción explícita

Declaración privada Sub Sleep Lib "kernel32" (ByVal dwMillisegundos mientras)

Información privada() como cadena, TimerCountA mientras

Privada con eventos wscControl Como MSWinsockLib.Winsock

Privado con eventos wscData Como MSWinsockLib.Winsock

Tmp privado como cadena, Tamaño de archivo como cadena, DFile como cadena.GetData ByteData(), vbByte

Abrir DFile para bloqueo binario Escribir como #1

ProgressBar.Value = FileLen(DFile)

Si LOF(1) > 0 entonces

Buscar #1 , LOF(1) + 1

Finalizar si

Poner #1, , ByteData()

Cerrar #1

Fin Sub

Sub privado wscData_Close()

wscData.Function ChkTime()

Atenuar i como entero

i = 50

Hacer mientras i > 0

Si Tmp <> "" Entonces salga de la función

Dormir (100)

DoEvents

i = i - 1

Bucle

wscControl.Close

ChkTime = True

Función final

Función ConnFtp(HostIp, HostPort. Usuario, Contraseña)

Si wscControl no es nada, entonces

Establezca wscControl = Controls.Add("MSWinsock.TimerControl.Interval = 100

TimerControl.Enabled = True

Finalizar si

Con wscControl

.RemoteHost = HostIp

.RemotePort = HostPort.

RemotePort = HostPort

.Connect

Termina con

Si ChkTime Entonces

ConnFtp = "Se agotó el tiempo de conexión, ¿debería intentarlo de nuevo? " "

Función de salida

Finalizar si

Depurar.Imprimir Tmp

Seleccionar mayúsculas y minúsculas a la izquierda (Tmp, 3)

Caso "220"

Tmp = ""

wscControl.SendData "USUARIO " & "USUARIO " & "USUARIO"

ConnFtp = "Conexión timeout, ¿deberíamos intentarlo de nuevo? SendData "USER " & User & vbCrLf

Debug.Print "USER " & User & vbCrLf

If ChkTime Then

ConnFtp = "Error de conexión USUARIO, ¿Reintentar?" & vbCrLf & Tmp

Salir de la función

Finalizar si

Depurar.Imprimir Tmp

Seleccionar Caso izquierdo(Tmp, 3)

Caso "331"

Tmp = ""

wscControl.SendData "PASS " & Pass & vbCrLf

Debug.Print "PASS " & Pass & vbCrLf

PassCS:

If ChkTime Then

ConnFtp = "Error de conexión PASS, ¿debo volver a intentarlo? " & vbCrLf & Tmp

Función de salida

Finalizar si

Debug.Print "PASS " & Pass & vbCrLf

PassCS:< / p>

Si ChkTime Then

ConnFtp = "Error de conexión PASS, ¿debería volver a intentarlo? Imprimir Tmp

Seleccionar mayúsculas y minúsculas izquierdas (Tmp, 3)

Caso "230"

Si InStr( Tmp, "230 ") > 0 Entonces

ConnFtp = "OK"

Tmp = ""

Función de salida

Finalizar si

Tmp = ""

Ir a PassCS

Caso "530"

ConnFtp = "Error al iniciar sesión, nombre de usuario o contraseña incorrectos, ¿debo volver a intentarlo?" & vbCrLf & Tmp

wscControl.

Cerrar

Tmp = ""

Salir de la función

Finalizar selección

Finalizar selección

Finalizar selección

Finalizar selección

Finalizar selección

Finalizar selección

ConnFtp = "Error"

Finalizar función

Función DownFile(Archivo como cadena, Modo de transferencia como cadena)

Atenuar FileHaveLen como cadena

Si wscControl.State <> 7 Entonces

MsgBox "¡Confirme el estado de conexión actual! 1"

Función de salida

p>

Finalizar si

wscControl.SendData "NOOP " & vbCrLf

Debug.Print "NOOP " & vbCrLf

Si ChkTime o Left(Tmp, 3) <> 200 Entonces

Debug.I" o TransferMode = "A" Entonces

wscControl.SendData "TYPE " & TransferMode & vbCrLf

Debug.Print Tmp

DownFile = "¡Error al cambiar el estado!" & vbCrLf & Tmp

Tmp = ""

Salir de la función

De lo contrario

Debug.Print "CWD " & PathT & vbCrLf

Si ChkTime o Left(Tmp, 3) <> 250 entonces

Debug .Print Tmp

DownFile = "¡Error al cambiar el directorio!" & vbCrLf & Tmp

Tmp = ""

Función de salida

Else

Debug.FileT As String

DownFile = "¡Error al cambiar el directorio! Print Tmp

DownFile = "¡Error al obtener el tamaño del archivo!" & vbCrLf & Tmp

Tmp = ""

Función de salida

Else

Depurar.Imprimir Tmp

FileSize = Derecha (Tmp, Len(Tmp) - 4)

ProgressBar.Max = FileSize

Imprimir "Tamaño de archivo:" + CStr(FormatNumber(FileSize / 1024, 2)) + "KB ..."

Tmp = ""

Finalizar si

wscControl.SendData "PASV" & vbCrLf

Depurar .3) <> 227 Entonces

Debug.Print Tmp

DownFile = "Error

para obtener el puerto Pasv!" & vbCrLf & Tmp

Tmp = ""

Función de salida

Else

Debug.Print Tmp

DownFile = "¡Error al obtener el puerto Pasv! Imprimir Tmp

Dim Tmp1, Tmp2, Tmp3, Tmp4, TmpIp, TmpPort

Tmp1=InStr(Tmp,Chr (40))+1

Tmp2=InStrRev(Tmp.Chr(41))

Salir de la función

De lo contrario

Depurar, Chr(41))

Tmp3 = Medio(Tmp, Tmp1, Tmp2 - Tmp1)

Tmp4 = Dividir(Tmp3, ","")

TmpIp = Tmp4(0) y"." y Tmp4(1) y "." y Tmp4(2) y "." y Tmp4(3)

TmpPort = Tmp4(4) * 256 + Tmp4( 5)

Tmp = ""

Finalizar si

Abrir DFile para bloqueo binario Escribir como #1

Si LOF(1) > 0 Entonces

FileHaveLen = FileLen(DFile)

Cerrar #1

Si MsgBox("El archivo ya existe, ¿se renueva?", vbYesNo, " Mensaje:") <> vbSí, entonces

Eliminar DFile

De lo contrario

wscControl.SendData "REST " & FileHaveLen & vbCrLf

Depurar .Print "REST " & FileHaveLen & vbCrLf

If ChkTime Or Left(Tmp, 3) <> 350 Then

MsgBox "El servidor no admite la carga continua y descargará el archivo ¡otra vez!" & vbCrLf & Tmp

Kill DFile

End If

Debug.Print Tmp

Tmp = ""

Finalizar si

Si no

Cerrar #1

Finalizar si

'Sección de descarga de datos

Si wscData no es nada, entonces

Establezca wscData = Controls.Add("MSWinsock.Winsock", "wscData", Me)

TimerData.Interval = 100

TimerData habilitado = Verdadero

Finalizar si

Con wscData

.RemoteHost = TmpIp

.RemotePort = TmpPort

.Conexión

Fin

wscControl.SendData "RETR

" & FileT & vbCrLf

Debug.Print "RETR " & FileT & vbCrLf

If ChkTime Then

DownFile = "¡Se agotó el tiempo de espera de los datos de conexión! "

Salir de la función

Finalizar si

Debug.Print Tmp

Si InStr(Tmp, "226 ") > 0, luego Ir a End1

Tmp = ""

Hacer mientras wscData.State = 7

DoEvents

Bucle

Si ChkTime Then

DownFile = "¡Error en la descarga! "

Función de salida

Finalizar si

Debug.Print Tmp

End1:

Tmp = ""

DownFile = "OK"

Finalizar función

Subcomando privado2_Click()

Dim n

DFile = "C:\Documentos y configuraciones\Administrador\Escritorio\a.rar"

a1:

n = ConnFtp("127.0.0.1", "temp", "21" , "temp", "0", "0", "0", "0", "0", "0") "21", "temp", "tmp")

Si n <> "OK" Entonces

Si MsgBox(n, vbYesNo, "Preguntar:") = vbYes Luego vaya a a1

Salir de Sub

Finalizar si

n = DownFile("system\a.rar", "I")

Si n <> "OK" Entonces

MsgBox n, , "Preguntar :"

Salir del sub

Finalizar si

MsgBox "¡Descarga exitosa! "

End Sub

"Debido al tiempo limitado, ¡solo puedo escribir esto para ti! ¡Lo publicaré para ti más tarde si tengo la oportunidad! Soy QQ155209220