Autor
		 | 
		
			Tema: Problema enviar archivo  (Leído 12,931 veces)
		 | 
	 
 
	
		
			
				
					
						
							Jareth
							
								 
								
								  Desconectado
								Mensajes: 334
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Hola,veran este codigo no me va para hacer lo que quiero,enviar una imagen recibirla,y cargarla en un picture. Servidor: dim ar as string Open "c:\capture.jpg" For Binary As #1 ar = Space(LOF(1)) Get #1, , ar Close #1 WS.SendData "paco|" & ar
  Cliente: Case "paco" Dim ar As String Open "c:\captura1.jpg" For Binary Access Write As #1 Put #1, , sData(12) Close #1 Form4.Picture1.Picture = LoadPicture("c:\capture.jpg")
  Aqui debe estar el problema,he probado en vez acces write solo binary y la verdad no se que puede pasar,supongo que todo el code esta bien,lo he hecho yo pero deberia funcionar y no me va. De antemano muchas gracias. Saludos. 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							vivachapas
							
								 
								
								  Desconectado
								Mensajes: 612
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
el problema es q no puedes enviar archivos muy grandes con winsock... debes dividirlos en paquetes y enviarlos de a uno y para recibirlso debes juntarlos... no se mucho del tema pero seguro alguien te explica mas... o si buscas como encuentras 
  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Jareth
							
								 
								
								  Desconectado
								Mensajes: 334
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Es una foto peor probaré a partirlo y juntarlo. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							yovaninu
							
								 
								
								  Desconectado
								Mensajes: 349
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
para enviar un archivo de cualquier tamaño a traves del winsock, no tienes que dividirlo tu, eso lo hace el protocolo tCP/ip, lo que tu tienes que hacer es recibirlo paquete a paquete. si el cliente envia, pues es en el servidor donde tendras que juntar los paquetes y viceversa. ejemplo de enviar un archivo desde el cliente al servidor: cliente:  Open "c:\unarchivo.jpg" For Binary As #1   filedata = Input(LOF(1), 1) 'en esta variable string cargo todo el archivo  Close #1
   ruta="d:\" 'en esta variable esta la ruta en donde se copiara en el servidor el archivo que envio
   filesize = Len(filedata) 'aqui calculo el tamaño de lo que estoy enviando (long) en bytes
  Winsock1.SendData "enviar" & "|" & filesize & "|" & ruta 'envio prmeramente una clave "enviar" luego el tamaño "filesize" y la ruta  "ruta"... (aun no estoy enviando el archivo en si)
  ahora te vas al servidor: Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) WS.GetData datosS
  If Left(datosS, 7) = "archivo" Then     dato = Split(datosSS, "|") 'una variable dato (dim dato() as string) se encarga de dividir clave, tamaño y ruta     filesize = dato(1) 'aqui tengo el tamaño enviado por el cliente     Path = dato(2) 'aqui la ruta      viene_archivo = True 'prendo un interruptor     Winsock.SendData "enviar" 'ahora si le pido al cliente que envie el archivo en si     datosSS = "" End If
  pasamos al cliente: Private Sub Winsock_DataArrival(ByVal bytesTotal As Long)
  Winsock.GetData DAToS
  If DAToS= "enviar" Then
   Winsock.SendData filedata 'aqui es donde realmente envia... aqui es donde el protocolo se encargara de dividir los paquetes... en el servidor habra que juntarlos uno a uno End If
  servidor: Private Sub Winsock_DataArrival(ByVal bytesTotal As Long) WS.GetData datoS
  If viene_archivo = True Then    'declarar arriba: Dim Datos2 As String     datos2 = datos2 & datoS 'lo que te decia: juntamos parte por parte el archivo que el cliente esta enviando
      If Len(datos2) = filesize Then 'si termina       Open Path & "nuevoArchivo.jpg" For Binary As #4 'asumo que envias un JPG, sino vas a tener que usar un CommonDialog en el cliente si quieres usar el mismo nombre de archivo que envias del cliente        Put #4, 1, datos2       Close #4       viene_archivo = False 'apagas el interruptor       datos2 = "" 'vaceas el buffer       MsgBox "Archivo Recibido con Éxito." 'vuala, aqui termina todo el proceso y depues de esto supongo que tendras que cargar la imagen recibida a un picture, eso ya es tu trabajo.     End If End If
  si deseas mas info, postea  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						| 
							~~
							
						 | 
						
							
							 
							
Mira  aki tienes otro ejemplo, q a mi me parece mas simple xD sera por q siempre lo uso       
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Jareth
							
								 
								
								  Desconectado
								Mensajes: 334
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
He probado los 2 codes y no me va,yo lo que quiero es enviar la imagen que capturo,un screen capture pero lo tengo en un timer claro,y me llegan algunos bytes de la imagen no se volveré a probar. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						| 
							~~
							
						 | 
						
							
							 
							
Pues deberia funcionarte.. Has compilado el mio tal y como te lo e puesto?? (cambiando lo unic olas rutas xD)
  A ver el funcionamiento es el siguiente:
  El cliente hace la petiion de un archivo.  El server enbia al cliente el tamaño del archivo. El cliente pone en marcha un interruptor. A partir de ese momento y hasta q el tamaño de datos recibidos sea igual al tamaño q nos enviaron antes alamcenamos. Una vez tengamos todo lo guardamos en un archivo
  Ese es el funcionamiento. Es simple, deberia funcionarte.. 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Jareth
							
								 
								
								  Desconectado
								Mensajes: 334
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
Pongo el code(yo quiero hacer un screen capture): Servidor: Private Sub Timer1_Timer() 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:\" & "\capture12" & ".jpg") Open "c:\capture.jpg" For Binary As #1 ar = Input(LOF(1), 1) filesize = Len(ar) Close #1 WS.SendData "paco|" & filesize & ar
  End Sub
  Cliente: Case "paco"
  Dim ar As String Dim filesize As String
  Dim datos2 As String filesize = sData(1) datos2 = datos2 & sData(2) enviar "yeah|"
   If Len(datos2) = filesize Then Open "c:\captura1.jpg" For Binary As #1 Put #1, , datos2 Close #1
  datos2 = "" Form4.Picture1.Picture = LoadPicture("c:\captura1.jpg") End If
  Y nada,0 bytes,antes alemnos me hizo 663 bytes pero ahora 0 y es cierto porque es el valor qeu tiene sdata(1). No sé que hago mal. Espero me puedan ayudar.  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							vivachapas
							
								 
								
								  Desconectado
								Mensajes: 612
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
yovaninu muy buena explicacion! al fin eh entendido casi todo! lo q no entiendo es q significa esta linea If Left(datosS, 7) = "archivo" Then para q es el left(datoS,7)??? viene_archivo = True 'prendo un interruptor
  y como se hace el interruptor? asi nomas? eso es todo? y para q sirve...  
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	
		
		
			
				
					
						
							Jareth
							
								 
								
								  Desconectado
								Mensajes: 334
								
								 
								
								
								
								
								 
							 
						 | 
						
							
							 
							
lo del left es: empezando desde la derecha,contamos 7 caracteres es decir left(datosS,7) seria de izquierda a derecha solo miramos los 7 primeros,si es igual a "archivo" pues hacemos la accion. El interruptor es un boolean que lo activa y lo desactiva para hacer acciones o saber el estado,lo activa al principio y luego comprueba el estado de  este para realizar una accion. Saludos
  pd:la verdad es que la explicacion si esta muy bien pero aun sigo sin que funcione... 
						 | 
					 
					
						
							
								| 
								 | 
							 
								| 
								 | 
								
									 
									En línea
								 | 
							  
							 
							
						 | 
					 
				 
			 |  
		 
	 |  
	 |  
 
	 
	
 
			 
			   |