transferencia de archivos x winsock

Iniciado por elmaro, 24 Julio 2006, 05:16 AM

0 Miembros y 1 Visitante están viendo este tema.

elmaro

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!

NYlOn

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.-

sebas369

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





Server CS1.6 : 200.43.193.105:27020

NYlOn

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.-

elmaro

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!

LeandroA

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

sebas369

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





Server CS1.6 : 200.43.193.105:27020