Autor
|
Tema: transferencia de archivos x winsock (Leído 2,530 veces)
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
hola que tal,. tengo un severo problema ya ace tiempo en mi programa no apuedo implementar la transferencia de archivos mediante winsock,. eh probado muchos codigos,. de este foro, de los que encontre x la web, y modificaciones mias,. pero nada,. no funcionan,. se pierden dato,. no manda archivos grandes ni nada,. si alguien me paudiera dar un codigo que garantize la transferencia mediante winsok se lo agradeceria mauchisimo saludos pd: pronto postiare una pregunta con respecto al NO-IP y las notificaciones,. El MaRo!
|
|
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
Bueno hice esta funcion hace un tiempo, pero creo que sigue funcionando xD. Sos libre de hacer las modificaciones que quieras. Espero que te sea util. La siguiente funcion sirve para ENVIAR ARCHIVOS: 'La funcion va a indicar si se produjo algun error (si devuelve True es que se envio correctamente)
Private Function EnviarArchivo(Archivo As String, Ruta As String, Buffer As Long, Winsock As Winsock) As Boolean 'Archivo es el archivo que vamos a enviar y Ruta es el lugar donde los va a guardar el servidor Dim Todo As String Dim Tamaño As Long Dim i As Integer On Error GoTo Error Open Archivo For Binary As #1 'Abrimos el archivo que vamos a enviar de forma binaria Tamaño = LOF(1) 'Obtenemos el tamaño del archivo a enviar Todo = Input(LOF(1), 1) 'Almacenamos el codigo binario del archivo en una variable Close #1
'Enviamos los datos del archivo (Tamaño, Ruta, Nombre) Winsock.SendData "Dat" & "*" & Tamaño & "*" & Ruta Pausa 0.5 'hacemos una pequeña pausa para dar tiempo a que lleguen los datos 'Ahora enviamos el archivo por partes For i = 1 To Len(Todo) If i <> 1 Then 'una vez q se envia la primera parte i = i + Buffer - 1 'empezamos a sumar el Buffer End If
Winsock.SendData Mid(Todo, i, Buffer) 'enviamos desde donde kedamos (i) hasta la cantidad indicada (Buffer)
Pausa 0.3 'hacemos otra pausa If i > Len(Todo) Then ' si (i) supera la longitud del archivo MsgBox "El archivo se envio staisfactoriamente.", vbInformation, "NYlOn" 'inidicamos q se envio el archivo Winsock.SendData "END" 'le avisamos al servidor que cierre el archivo End If Next i EnviarArchivo = True Exit Function
Error: EnviarArchivo = False End Function
'Esto genera una pausa en el programa Public Sub Pausa(Segundos As Single) Dim ComienzoSeg As Single Dim FinSeg As Single ComienzoSeg = Timer FinSeg = ComienzoSeg + Segundos Do While FinSeg > Timer DoEvents If ComienzoSeg > Timer Then FinSeg = FinSeg - 24 * 60 * 60 End If Loop End Sub
Se utiliza: EnviarArchivo "C:\MiArchivo.jpg", "C:\RutaFinal\Archivo.jpg", 600, Winsock1
Y en el evento DataArrival del Winsock que resive el archivo, va este codigo: Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long) Dim Code, Datos() As String On Error GoTo Cerrar Winsock1.GetData Code
Select Case Left(Code, 3) Case "Dat" ' Si son los datos del archivo Datos = Split(Code, "*") ' los separamos por "*" Open Datos(2) For Binary As #1 'abrimos el archivo indicado para luego ir introduciendo los datos Case "END" 'esto nos indica que cerremos el archivo (cuando termina de enviarse) Close #1 'lo cerramos xD Case Else 'si no fue ninguna de las otras instrucciones Put #1, , Code 'es pq son datos del archivo. Los almacenamos End Select Exit Sub Cerrar: Close #1 'esto es porque, si ocurre algun error, el archivo queda abierto y no se puede eliminar End Sub
El codigo esta testeado y funciona, pero aun asi nunca sabes donde puede saltar un problema... Asique si pasa algo, postea =) Saludos.-
|
|
|
En línea
|
|
|
|
sebas369
Desconectado
Mensajes: 31
Professional VB Programer
|
y para transmitir voz por winsock no hay nada ? , no pude conseguir en planet source code , esta todo en ingles, y busque y aparecen cosas de skype pero q no sirven , algun codigo directo para poner ? es muy rata q grabe y mande el archivo xD
|
|
|
En línea
|
|
|
|
NYlOn
Desconectado
Mensajes: 842
OOOOHHHHHH, TARAGÜIIII xDDDDDD
|
Ahi dice que sos Professional VB Programer xDDD Mira, enviar voz por un winsock no es algo que abunde por internet, asique es poco problable que encuentres un "codigo directo para poner". Te recomiendo que busques info sobre como captar voz y luego, segun la forma en que la captes, idees alguna forma para mandarla por ws y luego reproducirla. Saludos.-
|
|
|
En línea
|
|
|
|
elmaro
Desconectado
Mensajes: 301
Unas simples palabras...
|
hola NYlOn ,. bueno te quiero dar las gracias de ante mano,. aunke todavia no probe la foncion esa,. la estuve mirando y parece que va a funcionar,. yo abia echo algo parecido., aasi era mayor a 1000caracteres los mandava todos juntos y si no...los separaba en pedasos de 1000 y luego amndaba los restos...pero tenia problemas con los restos :S en cuanto prueve tu funcion te digo que tal me fue,. gracias El MaRo!
|
|
|
En línea
|
|
|
|
LeandroA
|
y para transmitir voz por winsock no hay nada ? , no pude conseguir en planet source code , esta todo en ingles, y busque y aparecen cosas de skype pero q no sirven , algun codigo directo para poner ? es muy rata q grabe y mande el archivo xD Hola te paso un chat que hice que puedes tranmitir la vos, si bien como vos decis es muy rata que grabe y mande el archivo es vastante eficiente, lo digo porque de echo encontre otra forma que eniva de una manera mucho mas profesional (muy bueno por cierto) pero tenia ciertos problemas y tirava un error (nose quizas en red no lo aria pero porlomenos en una misma pc si )(el error era espacio de cola insuficiente en un doevents) el chat mio http://ar.geocities.com/leandroascierto/Chat.zipy el otro que te decia http://ar.geocities.com/leandroascierto/EnviarAudio.zipmiralos a ambos
|
|
|
En línea
|
|
|
|
sebas369
Desconectado
Mensajes: 31
Professional VB Programer
|
gracias capo , miro nomas ,y professional vb programmer lo puse al re pedo xD , empese hace menos de 3 meses a programar , y no entiendo mucho,pero algunas cosas salen saludos
|
|
|
En línea
|
|
|
|
|
|