Autor
|
Tema: Problema enviar archivo (Leído 11,410 veces)
|
~~
|
A ver cambia esto: Open "c:\capture.jpg" For Binary As #1 ar = Input(LOF(1), 1) filesize = Len(ar) Close #1 Por space(lof(1)) a ver si asi te funciona ademas en ningun momento haces un get para obtener los datos... y en la linea: pon FileLen("c:\capture.jpg") en vez de len Otra cosa, se te guarda bien la imagen en C:?? por q mira: foto.SaveFile ("c:\" & "\capture12" & ".jpg") No ves q hay dos \. Lo intentas guardar en C:\\capture12.jpg.. Aparte sigues aciendolo mal. Fijate: SERVER: WS.SendData "paco|" & filesize & ar
CLIENTE: No ves q paco solo se envia una vez mientras q los otros datos siguen llegando? asi no see acumulan, tienes q poner un interruptor como yo te e dicho ( FIJATE EN EL CODE Q TE E PASADO!!!!), seria asi: SERVER: Private Sub command1_click() ' Te lo pongo en un boton y luego ya lo cambias Dim foto As New cJpeg Dim ar As String Dim filesize As String foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2 foto.Quality = 50 ' aqui ajustas la calidad dsd 1 a 100 hasi bajas calidad bajas peso foto.SampleScreen foto.SaveFile ("c:\" & "capture" & ".jpg")
ws.SendData "Tam:" & FileLen("C:\capture.jpg") 'Enviamos el tamaño de la foto q acabamos de sacar
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 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 DataFile = "" 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 Asi te tiene q funcionar por mis coj*** 1S4ludo
|
|
|
En línea
|
|
|
|
Jareth
Desconectado
Mensajes: 334
|
ajajajaj me rio de las capulladas que he hecho,xD.Gracias E0N pruebo y me tiene que ir por huevos sino me matas,xD. Enga gracias y saludos.
|
|
|
En línea
|
|
|
|
vivachapas
Desconectado
Mensajes: 612
|
gracias por la respuesta Jareth entonces segun entiendo podriamos reemplazar el codigo left(datosS,7) por un separador | y comprobrar si la primera parte es archivo... me parece q para mi programa iria mejor de esa forma... es lo mismo no? segun entiendo
|
|
|
En línea
|
|
|
|
~~
|
Si, es mucho mejor Puedes poner cualkier caracter q actue como separador y luego usar un split para partirlo
|
|
|
En línea
|
|
|
|
vivachapas
Desconectado
Mensajes: 612
|
ok muchas gracias EON... por ahora la funcion q le puse es la tuya se la copie.. pero no se me es mas dificil de entender.. ahora con estos datos voy a hacer la mia gracias a todos
|
|
|
En línea
|
|
|
|
Jareth
Desconectado
Mensajes: 334
|
Yo solo decir que me va mal,la imagen me llega solo una parte de arriba,solo un cacho,no se en que fallo si el code es el de E0N. Por cierto E0N,yo lo hacia con case osea enviaba "esto|" y hacia case "esto" pero tu no lo haces asi,no se seguiré probando,peor solo me llega un cacho,que puede ser?
|
|
|
En línea
|
|
|
|
~~
|
Seguramente q me haya comido algun trozo de code por q lo e hecho aki directamente, sin el VB delante. Vamos a ver, prueva con esto: Server:Private Sub Form_Load() ws.Close ws.Connect "127.0.0.1", 2848 End Sub
Private Sub ws_Connect() Dim foto As New cJpeg Dim ar As String Dim filesize As String foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2 foto.Quality = 50 ' aqui ajustas la calidad dsd 1 a 100 hasi bajas calidad bajas peso foto.SampleScreen foto.SaveFile ("C:\capture.jpg")
ws.SendData "Tam:" & FileLen("C:\capture.jpg") 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:\capture.jpg" For Binary As #1 Send = Space(LOF(1)) Get #1, , Send Close #1
ws.SendData Send End If
End Sub Cliete: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 If Len(DataFile) = LenFile Then Open "C:\capture2.jpg" For Binary As #1 Put #1, , DataFile Close #1 DataFile = "" MsgBox "El Fichero se a Enviado Correctamente" Envio = False
'Una vez lo tenemos lo mostramos Form4.Picture1.Picture = LoadPicture("C:\capture2.jpg") End If End If
If Left(data, 4) = "Tam:" Then LenFile = Mid(data, 5) Envio = True ws.SendData "SendFile" End If Ya esta. Compilas eso (solo añadiendo un form4 con un picture box unos winsocks y los modulos cjeg) y deberia funcionarte bien. Lo de usar left o | da igual. Es mejor usar el split la verdad asi q en tu caso el server deberia enviar ws.SendData "Tam:|" & FileLen("C:\capture.jpg") en vez de ws.SendData "Tam:" & FileLen("C:\capture.jpg") Y el cliente comprovar si es Tam: solamente, seria: case"Tam:": en vez de If Left(data, 4) = "Tam:" Then Pero vamos eso ya es q tu lo adaptes. Si sigue sin funcionarte dimelo y te lo subo bien, por q esto lo estoy haciendo sin provar 1S4ludo
|
|
|
En línea
|
|
|
|
Jareth
Desconectado
Mensajes: 334
|
Hola muchas gracias E0N por tu ayuda,pero solo me llega una parte de la imagen,un poco de la de arriba,son 139 kb y me llegan 1,36 kb. No sé si soy yo pero estos code solo me hacen llegar eso. Y eso que tu code lo he probado aparte y funciona 100%,el problema esta en algo mio....aqui va el code(igual es porque hay algo en un timer): SERVIDORPrivate Sub Timer1_Timer() Dim foto As New cJpeg
Dim filesize As String foto.SetSamplingFrequencies 2, 2, 2, 2, 2, 2 foto.Quality = 50 ' aqui ajustas la calidad dsd 1 a 100 hasi bajas calidad bajas peso foto.SampleScreen foto.SaveFile ("c:\" & "capture" & ".jpg")
WS.SendData "tam:|" & FileLen("c:\capture.jpg")
Case "send" Dim ya As String Dim send As String ya = FileLen("c:\capture.jpg") Open "c:\capture.jpg" For Binary As #1 send = Space(LOF(1)) Get #1, , send Close #1 WS.SendData "yas|" & send & "|" & ya End Select
End Sub
CLIENTECase "tam:" Dim lenfile As Long lenfile = Mid(sData(1), 5) enviar "send|" Dim ya As String ya = sData(2) Case "yas" Dim datos2 As String datos2 = datos2 & sData(1) If Len(datos2) = ya Then Open "c:\captura.jpg" For Binary As #1 Put #1, , datos2 Close #1 datos2 = "" MsgBox "llegaron perfectamente" End If
Bueno creo que es todo,a ver si hay algo que hago mal,o si me recomendais cambiar.... Muchas gracias a todos,que sé qeu soy mu pesao...
|
|
|
En línea
|
|
|
|
~~
|
El mio aparte si te fucionaba no? por q ya me estaba preocupando xDD
Kita el timer. Haz q nada mas recibir una imagen haga peticion de la siguiente. Tendrias q ponerlo en el cliente justo despues de el msgbox q dice "llegaron perfectamente".
1S4ludo
|
|
|
En línea
|
|
|
|
Jareth
Desconectado
Mensajes: 334
|
Tu code funciona 100%,pero he quitado el timer y no me va,igual solo un trozo. No se que puede ser,en vez de un timer esta en un case "captura" que se envia al dar al boton start y se vuelve a enviar despues del msgbox,eso he cambiado y nada,igual. Has probado mi code,si te va a ti? O si tiene errores,esque joder lo tengo ahi y no lo veo.
|
|
« Última modificación: 2 Abril 2007, 01:18 am por Jareth »
|
En línea
|
|
|
|
|
|