Red de conocimiento informático - Problemas con los teléfonos móviles - Cómo determina vb winsock la finalización del envío, el nombre del archivo de envío y la integridad

Cómo determina vb winsock la finalización del envío, el nombre del archivo de envío y la integridad

No sé si su winsock es el protocolo udp o el protocolo tcpip

El siguiente es un ejemplo que escribí. Estoy usando el protocolo udp y es posible que los datos que envía no se reciban correctamente.

¿Entonces hice la verificación?

'Aquí está el archivo a enviar

Option?Explicit

Dim?GetFileNum?As?Integer,?LenFile?As?Long,?SendByte()? ¿Como?Byte?'Paquete enviado

Privado?Sub?Command1_Click()

¿Activado?Error?Reanudar?Siguiente

Comando1.Enabled?=?False

GetFileNum?=?FreeFile?'Obtener el número del archivo no utilizado

LenFile?=?FileLen(Text1.Text)?Obtener la longitud del archivo a transferir

Si?Texto2.Texto?=?"" ?O?Derecha(Izquierda(Texto2.Texto,?2),?1)? <>?" :"?Entonces?Texto2.Texto?=?Texto1.Texto

Winsock0.SendData?"#SEND?STA#"?//"? &?Text2.Text

Wt?0.5

¿Abrir?Text1.Text?For? ¿Binario? ¿As? #GetFileNum? 'Abrir el archivo a transferir

¿Llamar?TCPSendFile(Winsock0,?GetFileNum,?GetFileNum,?SplitFile)?Enviar archivo

Me.Caption? =?Ahora

p>

Ti.Enabled?=?True

Fin?Sub

Privado?Sub?Command2_Click()

¿Descargar?Yo

Fin?Sub

Privado?Sub?Form_Load()

Dim?A?As?String

¿Activado? ¿Error?Reanudar?Siguiente

Comando2.Top?=?-2000

Winsock0.RemoteHost?=?IPX?'Serverip

Winsock0.RemotePort?=? FilePort

End?Sub

Private?Function?SplitFile() As?Long? Para mayor claridad, los siguientes dos subprocesos se utilizan para completar el cálculo de cuántos Esta vez se pueden transmitir bytes de datos y la transmisión de datos

¿Activado?Error?Reanudar?Siguiente

Dim?GetCount?As?Long

Si? ¿LenFile?>=?¿Entonces? "Calcule el número de bytes que se pueden enviar esta vez

GetCount?=?4000

LenFile?=?LenFile?-?GetCount

Else

GetCount?=?LenFile

LenFile?=?LenFile?-?GetCount

Else

GetCount?=?LenFile?GetCount

¿Fin?Si

SplitFile=?GetCount

Fin?Función

Private?Sub?TCPSendFile(objWinSock como Winsock,?FileNumber? como Entero, ¿SendLen? Tan largo)

¿Activado?¿Error?¿Reanudar?Siguiente

¿Atenuado?FileByt.

e()? como Byte, I? como Largo, j? como Largo,? 4

ReDim?SendByte(0)

ReDim?FileByte(SendLen?1)

Temp?=?SendLen?+?7

SendByte?=?Temp?' envía un valor de longitud negativo al encabezado

Get?#FileNumber,?,? FileByte ? 'Leer archivo

ReDim?Preserve?SendByte(SendLen?+?7)?Agregar el encabezado + al encabezado del archivo

For?I?=?0?To? UBound (FileByte)

SendByte(I?+?7)? =?FileByte(I)

'DoEvents

Siguiente

Winsock0 .SendData?SendByte

Fin?Sub

Privado?Sub?Form_Unload(Cancelar?As?Integer)

¿Encendido?Error?Reanudar?Siguiente

Winsock0.Close

Err.Clear

Fin?Sub

Privado?Sub?TEnd_Timer()

Activado ? Error Reanudar siguiente

Winsock0.SendData?"#END#"

Err.Clear

End.Sub

Private.Sub . Ti_Timer()

On.Error.Resume.Next

Winsock0.SendData?"#ERR#"

Fin?Sub

¿Privado?Sub?Winsock0_DataArrival(ByVal?BytesTotal?As?Long)

¿Encendido?

Dim?S?As?String

Winsock0.GetData?S

Seleccionar?Caso?S

Caso?"ok"?Continuar enviando exitosamente

Si?LenFile?=?0?Entonces 'Envío completado

p >

If?S?<>?"#Then, Winsock0.SendData?"#SEND?END#"

Me.Caption?=?"¡El archivo se cargó correctamente! "

Comando1.Enabled?=?True

Ti.Enabled?=?False

TEnd.Enabled?=?True

¿Salir?Carga de archivo completada: ["? &?Left((FileLen(Text1.Text)?-?LenFile)?/?FileLen(Text1.Text)?*?100,?4)?%]"

¿Fin? Si

Llamar?TCPSendFile(Winsock0,?GetFileNum,?SplitFile)

Caso?"#END#"

TEnd.Enabled? =?False

FMain..TiF.Enabled?=?True

Case?"no"?Reenviar el paquete anterior sin éxito

Winsock0.

End.Select

End.Sub

'El siguiente es el archivo recibido

Option.Explic

it

Dim.FOK.As.Boolean,.Fs.As.Long,.FileNumber.As.Integer,.LenFile.As.Long?La longitud del archivo

Privado ?Sub ?Command1_Click()

¿Descargar?Yo

Fin?Sub

¿Privado?Sub?Command2_Click()

¿Encendido?Error ?Reanudar ?Siguiente

Dim?A?As?String

Me.Caption?=?" Iniciar descarga"

Me.Caption?Iniciar descarga"

If?Dir(Text2.Text)?<>?"" And?ChV.Value?=?0?Then

If?MsgBox("El archivo ya existe, ¿sobrescribirlo? " , ?vbCritical?+?vbYesNo)? =?vbYes?Entonces?Kill?Text2. De lo contrario, salga de Sub

Else

Kill?Text2.Text

Fin ?If

If?Text2.Text?=?"" ?Then?Text2.Text?=?Text1.Text

'Command2.Enabled?=?False

Si?Ch.Value?=?0?Entonces?A?=?" #DOW#"?#DOW#""¿Else?A?=?"

FMain.Wsk. ¿EnviarDatos?&?Text1.Text

Wt?1

FMain.Wsk.SendData?"#DOE#"? ¿Fin? Sub

Privado?Sub?Form_Load()

Dim?A?As?String

'FMain.Ts.Enabled?=?True

p>

¿Error?Continuar con el siguiente paso

Si FMain.Cb.Text?=?"Grupo local"?O?FMain.Cb.Text?=?"Entonces

Me.Caption?=?"Vuelva a seleccionar el usuario de descarga ["Grupo" no se puede descargar correctamente]"

Else

Command1.Top?=?-2000

Winsock0.LocalPort?=?FilePort

Winsock0.Bind

¿Fin?Si

Fin?Sub

¿Privado?Sub?Form_Unload (¿Cancelar?Como?Integer)

Privado?Integer)

¿Activado?Error?Reanudar?Siguiente

Winsock0.Close

Err .Clear

Fin?Sub

Privado?Sub?La_Click()

CDL.FileName?FileName=?"

CDL .ShowOpen

Text2.Text?=?CDL.FileName

Fin?Sub

Privado?Sub?Winsock0_DataArrival(ByVal?bytesTotal?As ?Long)

Activado?Error?Reanudar?Siguiente

Dim?FileByte()?As?Byte,?A?es una cadena, reparar

Byte()? es byte, I? es largo, J? es largo, Temp? es cadena, W? es cadena

Winsock0.GetData?FileByte,?vbArray?+?vbByte?' matriz de bytes

J?=?UBound(FileByte)?Obtener la longitud del paquete

For?I?=?0?To?7?Step?2?' p>

Temp?=?Temp?&?Chr(FileByte(I))

Siguiente

Para?I?=?0.0?To 9?Fin del envío del archivo. etiqueta

A =?A &?Chr(FileByte(I))

Siguiente

Si?#Entonces, Winsock0.SendData "No"

Si?A?=?"#Entonces

For?I?=?0?To?Len(FMain.TIn.Text)

Si?I?

W?=?Left(Right(FMain.TIn.Text,?I),?1)

¡Si?!"Entonces

W =?Left(Right(FMain.TIn.Text,?I?+?4),?5)

¿Salir?Para

¿Fin?

Si no

¿Salir? Para

¿Fin? Si

¿Siguiente? Yo

¿Si? ¡Descarga completada! "Entonces

FOK=?¡Descarga completada! ["? &?Text2.Text?&?"]" ¡Descarga completada! " ?

FMain.TIn.Text?=?FMain.TIn.Text?["? &?¿Ahora?&?"]" &?"

FMain.TIn. Text?=?FMain.TIn.Text?&?Descarga completada! ("? &?Fs? &?" <="?&?LenFile?&?")" ? &?vbCrLf

Command2 .Enabled?=?True

End?If

Else

If?Val(Temp)? =?J?'Comparar longitudes para ver si se perdieron los paquetes

ReDim?

For?I?=?0?To?J?-?8? 'Presentar encabezado del paquete

MendByte(I) ? =?FileByte(I?+?7)

Siguiente

Fs?=?Fs?+?UBound(FileByte)?-?7

Poner ?#FileNumber,? ,?MendByte?'Escribir archivo

Winsock0.SendData?"ok"?Enviar una solicitud para continuar enviando

Me.Caption?=?"Descarga de archivo completada : ["? &?Left(Fs?/?LenFile?*?100,?4)? &?" %]"

Else

If?Left(A,? 10 )? =?"#Entonces

A=?""

¿Para?I?=?10?A?UBound(FileByte)?La marca de envío del archivo finaliza

A?=?A?&?Chr(FileByte(I))

Siguiente

LenFile?=?Val

(Left(A,?InStr(A,?" //")?-?1))

For?I?=?0?To?Len(Text2.Text)

A?=?Left(Right(Text2.Text,?I),?1)

Si?\Entonces salga para

Siguiente

Si Dir(Left(Text2.Text, Len(Text2.Text)?Text2.Text,?Len(Text2.Text)? -luego, MkDir(Left(Text2.Text,?Len(Text2.Text)?

'"#SEND?STA#"?//"? &?Text2.Text

FileNumber?=?FreeFile?'Obtener número de archivo no utilizado

Fs?= ? 0

¿Abrir?Texto2.Texto?Para?Binario?¿Como?#NúmeroDeArchivo?'Abrir archivo

De lo contrario

Si?A?#Entonces

p>

Winsock0.SendData?"no"?Se produce pérdida de paquete, solicitud para reenviar

Else

Winsock0.SendData?"#END#"?Enviar solicitud para continuar

Cerrar #NúmeroDeArchivo

Restablecer

Si FOK?=?¡Descarga completada ["? &?Text2.Text?&?"]"

FMain.TIn.Text?=?FMain.TIn.Text?["? &?Now?&?"]" ? &?"

FMain.TIn.Text?=?FMain .TIn.Text?&?Descarga completada! ("? &?Fs? &?" <="?&?LenFile?&?")" ? &?vbCrLf

Command2.Enabled?=? Verdadero

De lo contrario

FOK?=?Falso

¿Fin? ¿Fin?