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
eso ami me pasava es por el textbox prueva metiendolo a una varible ;).
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
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
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
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
por TCP/UDP ,también tengo unos código para hacer por http pero son muy complicados ;D
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
Una pregunta acaso no es TCP/IP
como ?¿?
Hola de nuevo:
E estado provando el codigo q me as pasado WarGhost y funciona perfecto, pero lo raro es q solo funciona la primera vez q ejecutas el programa :huh: :huh: :huh: :huh:
Despues de provar y provar poniendo MsgBox y andar a vueltas con el debugger :-\ e haberiguado donde esta el fallo (aunke bo comprendo por q falla :-X)
Mira aki esta el problema:
Private Sub ws_DataArrival(ByVal bytesTotal As Long)
Dim data As String
ws.GetData data
If Envio = True Then
DataFile = DataFile & data
If Len(DataFile) = LenFile Then
Open "C:\foto1.jpg" For Binary As #1
Put #1, , DataFile
Close #1
MsgBox "El Fichero se a Enviado Correctamente"
Envio = False
End If
End If
If Left(data, 4) = "Tam:" Then
LenFile = Mid(data, 5)
Envio = True
ws.SendData "SendFile"
End If
End Sub
La primera vez q recibimos un fichero (en este caso una foto) nos manda el archivo y el tamaño perfectamente, pero cuando quiero recibir de nuevo esa misma foto pone la variable en true y todo perfectamente, pero antes de eso me a mandado un tamaño de archivo superior al q es realmente, y aunke ya alla recibido tooda la foto, la variable no se pone en false, ya q la linea:
If Len(DataFile) = LenFile Then
no es cierta, y los datos q llegan los sigue acumulando para despues meterlos en la imagen...
Lo mas raro es q si lo haces la primera vez funciona perfectamente, pero con la segunda envia un tamño mayor... q raro no???
Creo q el problema se debe a eso :huh: :huh: :huh: :huh: :huh: :huh: si me podeis ayudar os lo agradeceria muxo
1S4ludo ;)
perdona se me a olvidado limpiar la variable y claro se van acumulando y el if falla ;).
mete esto:
DataFile = ""
debajo debajo de esto:
Close #1
Sorry :-[
Hola!!
Ahora mismo venia a contarte q porfin habia encontrado el problema xDD pero veo q lo has encontrado tu antes jajaja
Cita de: WarGhost en 14 Septiembre 2006, 16:22 PM
Sorry :-[
De sorry nada, todos nos ekivocamos xDD y me has ayudado muxo :P
De nuevo gracias WarGhost, ahora modifico esa funcion, acabo la transferencia de archivos y ya dentro de poco publico (espero q os guste ;))
1S4ludo