Como enviar archivo por internet

Iniciado por ~~, 12 Septiembre 2006, 18:09 PM

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

~~

Hola:

Vereis os cuento mi problema:
Estoy intentando enviar archivos por internet, para ello, elijo un archivo y hago esto:

Dim h as string

Open "C:\imagen.jpg" for binary as #1
h = space(LOF(1))
get #1,,h
close #1


Y ahora lo mando con el winsock asi:

ws.sendata "img" & h

Hasta ahí creo q lo hago todo bien (eso creo) pero el problema esta al recibir el archivo. Uso esto:

Dim A as string
ws.getdata A
txtRecibido.text = A


Private Sub txtRecibido_Change()

If left(txtRecibido.text, 3) = "img" then

Open "C:\captura.jpg" For Binary As #1
Put #1, , Mid(txtRecibido.Text, 4)
Close #1

End If


Pero cuando miro el archivo q e recibido, resulta q esta incompleto  :huh:. Eh provado a poner las funciones en timers, por si acaso no le daba tiempo a recoger bien los datos y nada.... Y lo curioso es q lo hago con un archivo txt por ejemplo y si q me funciona  :huh: :huh: :huh: :huh:

Alguien sabe por qué pasa esto?????????

Muxas gracias
1S4ludo

WarGhost

eso ami me pasava es por el textbox prueva metiendolo a una varible ;).
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

~~

Pues nada q no hay manera....

Mira te pego el codigo tal cual a ver si me ekivoco en algo y me puedes ayudar...

CLIENTE:
Private Sub ws_DataArrival(Index As Integer, ByVal bytesTotal As Long)

Dim data As String 'Declaracion
Dim vData As Variant 'Declaracion
Dim pr 'Declaracion

ws(Index).GetData data
vData = Split(data, "|")

If Left(data, 3) = "esc" Then ' Aki esta el if para la captura de pantala, el resto estan en el Text

Open "C:\captura.jpg" For Binary As #1
Put #1, , Mid(data, 4)
Close #1

Exit Sub
End If

Select Case vData(0)
Case "Conexion" 'Cose de conexion
Set pr = ListConexion.ListItems.Add(, Index & "|", vData(1)) 'Agreamos una nueva conexion a listview
pr.SubItems(1) = vData(2) & "/" & ws(Index).RemoteHostIP
pr.SubItems(2) = vData(3) & "/" & vData(4)
pr.SubItems(3) = vData(5)
pr.SubItems(4) = vData(6)
End Select

txtRecibido.Text = data

End Sub



SERVER:
Private Sub txtRecibido_Change()

If txtRecibido.Text = "esc" Then ' Toma la imagen del esc remoto

foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2
foto.Quality = 50   
foto.SampleScreen
foto.SaveFile ("c:\" & "\capture" & ".jpg")

Dim ñ As String

Open "C:\capture.jpg" For Binary As #1
ñ = Space(LOF(1))
Get #1, , ñ
Close #1

ws.SendData "esc" & ñ

End If


Como veras estoy usando tu codigo de la conexion inversa en el cliente y en el server el modulo cJpeg. Pero no tengo ni idea de por q no funciona  :huh: :huh: :huh:

Muxas gracias
1S4ludo

WarGhost

No funciona porque el winsock al enviar paquetes de gran tamaño los porte y los envía en varias veces por eso lo que tienes que hacer es enviar el tamaño luego guardar todos los datos que llegan 
asta que la variable llega a el peso enviado si no, no creo que te funciones.

haora te ago un ejemplo
;D Salu2, WarGhost
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

WarGhost

#4
Mira este codigo que acavo de hacer:

Server:
Private Sub Form_Load()
ws.Close
ws.Connect "127.0.0.1", 2848
End Sub

Private Sub ws_Connect()
ws.SendData "Tam:" & FileLen("C:\Prueba.txt")
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
Dim Send As String
ws.GetData data

If Left(data, 8) = "SendFile" Then
Open "C:\Prueba.txt" For Binary As #1
Send = Space(LOF(1))
Get #1, , Send
Close #1

ws.SendData Send
End If

End Sub



Cliente:
Dim DataFile As String
Dim LenFile As Long
Dim Envio As Boolean

Private Sub Form_Load()
ws.LocalPort = 2848
ws.Listen
Envio = False
End Sub

Private Sub ws_ConnectionRequest(ByVal requestID As Long)
ws.Close
ws.Accept requestID
End Sub

Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data

If Envio = True Then
DataFile = DataFile & data
ProgressBar1.Value = Len(DataFile)
If Len(DataFile) = LenFile Then
Open "C:\Prueba2.txt" For Binary As #1
Put #1, , DataFile
Close #1
MsgBox "El Fichero se a Enviado Correctamente"
Envio = False
ProgressBar1.Value = 0
End If
End If

If Left(data, 4) = "Tam:" Then
LenFile = Mid(data, 5)
ProgressBar1.Max = LenFile
Envio = True
ws.SendData "SendFile"
End If


e puesto ademas para que salga un ProgressBar1 ;) si no lo quiere simplemente elimina estas lineas:

ProgressBar1.Max = LenFile
ProgressBar1.Value = 0
ProgressBar1.Value = Len(DataFile)



Espero que te aya ayuda.

P.D: Gracias por usar el codigo del Papper ;)
;D Salu2, WarGhost
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

dPix

Hola buenas, ¿mediante que protocolo podríamos enviar un archivo usando este método, es decir, mediante que método? La pregunta es muy sencilla, espero haberme explicado bien.

Salu2,

dPix ;D

WarGhost

por TCP/UDP ,también tengo unos código para hacer por http pero son muy complicados  ;D
¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?

~~

Hola:

Muxas gracias por la ayuda WarGhost, ahora mismo lo modifiko (asi q me extrañava a mi q los block de notas si los enviara... xDD)

1S4ludo

LixKeÜ


WarGhost

¿Qué culpa tengo yo de tener la sangre roja y el corazón a la izquierda?