elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Envio de archivos con CSocketPlus
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Envio de archivos con CSocketPlus  (Leído 1,162 veces)
skyline2412

Desconectado Desconectado

Mensajes: 9



Ver Perfil
Envio de archivos con CSocketPlus
« en: 7 Octubre 2008, 23:52 pm »

Saludos,
Bueno en estas ultimas semanas vengo programando un projectito de vb6 que incluye un filemanager ( ya saben..lo tipico listar ejecutar subir descargar..)
Primero empece con el winsock, y bueno entre la dependencia del ocx y el 'memory leak' que te obliga a usar DoEvents, pues me decidi a cambiarlo por CSocketMaster, y este ultimo lo cambie en ultima instancia por CSocketPlus, ya que queria poder crear varias conexiones, un canal para la comunicacion simple, y otro para la transferencia de ficheros (al estilo que funcionan los programas ftp)

pero claro estoy teniendo algunos inconvenientes a la hora de la transferencia del archivo, la forma en que lo envio en si funciona,
pero los 2 problemas son que durante la transferencia la CPU se pone al 100%
y la RAM sube un total de la memoria que ocupa la aplicacion + el espacio de la aplicacion cargada en memoria.
Bueno esto ultimo lo solucione con un "ERASE buffer" obviamente para limpiar todo lo que cargo en memoria del file.
Pero en cuanto a lo de la carga del CPU tengo bastantes dudas.

Supongo que lo que deberia de hacer es partir el buffer en X bytes y montar un bucle cierto?
Si es asi calculo que lo mejor seria leer X longitud de bytes del archivo, ademas asi evito que se cargue todo el tamaño del file en memoria, renovando los bytes a cada vuelta.

Asi es como lo hago actualmente para que se hagan una idea.


Private Sub WS_DataArrival(ByVal Index As Variant, ByVal bytesTotal As Long)
 ·
 ·
 ·
// Recibiriamos la cadena "bajar|archivo"
on case "bajar"
   indice = indice + 1
   canal_envio = indice

   filename = Dir1.path & "\" & data(1)
   ws.ArrayAdd canal_envio

   // Leemos el file
   ReDim buffer_file(FileLen(filename) - 1)
   Open filename For Binary As 1
   Get #1, 1, buffer_file
   Close #1
   ws.CloseSck canal_envio
   ws.Connect canal_envio, ws.RemoteHostIP(Index), ws.RemotePort(Index)

Private Sub ws_Connect(ByVal Index As Variant)
   If Index = canal_envio Then
      ws.SendData Index, "comienzo|" & filename
      ws.SendData Index, buffer_file
      sent = True
      Erase buffer_file
   End If
End Sub

Private Sub ws_SendComplete(ByVal Index As Variant)
  If Index = canal_envio And sent = True Then
    ws.CloseSck (canal_envio)
    canal_envio = -1
    sent = False
  End If
End Sub

Bueno este metodo tiene el principal inconveniente (aparte de los ya comentados anteriormente) de que solo admite una transferencia y si kieres descargar otro tendras q esperar a q acabe el primero una verdadera mamonada precisamente porque implemente CSocketPlus para poder realizar transferencias simultaneas..
Bueno espero me puedan ayudar, mediante consejos esquemas y demas para lograr todo esto, ya saben.. reducir el uso de la CPU e implementar una funcion de descarga en condiciones ya que llevo atascado aqui un par de semanas ya..

Gracias.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
CSocketPlus no funciona en wan
Programación Visual Basic
extreme69 0 1,894 Último mensaje 13 Septiembre 2011, 08:23 am
por extreme69
Envio de Archivos
Java
ioyola 1 1,679 Último mensaje 30 Mayo 2013, 21:30 pm
por RyogiShiki
Envio de archivos por sockets
Redes
programacion19 0 3,080 Último mensaje 22 Agosto 2016, 18:02 pm
por programacion19
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines