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,. :-X
El MaRo!
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.-
y para transmitir voz por winsock no hay nada ? :rolleyes: , 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
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.-
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 :D
El MaRo!
Cita de: sebas369 en 24 Julio 2006, 21:03 PM
y para transmitir voz por winsock no hay nada ? :rolleyes: , 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.zip
y el otro que te decia
http://ar.geocities.com/leandroascierto/EnviarAudio.zip
miralos a ambos
gracias capo , miro nomas :) ,y professional vb programmer lo puse al re pedo xD , empese hace menos de 3 meses a programar :P , y no entiendo mucho,pero algunas cosas salen :)
saludos