Problema enviar archivo

Iniciado por Jareth, 1 Abril 2007, 00:41 AM

0 Miembros y 3 Visitantes están viendo este tema.

~~

A ver cambia esto:
CitarOpen "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:

filesize = Len(ar)

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:
Case "paco"

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

Jareth

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.

vivachapas

gracias por la respuesta Jareth
entonces segun entiendo podriamos reemplazar el codigo

Citarleft(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

~~

Si, es mucho mejor

Puedes poner cualkier caracter q actue como separador y luego usar un split para partirlo ;)

vivachapas

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

Jareth

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?

~~

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

Jareth

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):

SERVIDOR

Private 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


CLIENTE


Case "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... :P

~~

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

Jareth

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