elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 02:05  


Tema destacado: Suscripción al boletín mensual de elhacker.net

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General (Moderador: Littlehorse)
| | |-+  Problema: delphi, socket y envios de archivos
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema: delphi, socket y envios de archivos  (Leído 2,079 veces)
N3Tw0lf

Desconectado Desconectado

Mensajes: 20


NETwolf


Ver Perfil
Problema: delphi, socket y envios de archivos
« en: 14 Mayo 2011, 07:07 »

Hola muy buenas gente este es mi primer post en el foro espero que me puedan ayudar (: .
tengo este codigo que sirve para que mi cliente socket en delphi reciba un archivo lo entiendo poco, pero igualmente funciona bien con archivos de texto. Se trata de una conexion con de socket normal que trae delphi , el servidor recibe bien archivos de texto (.txt) pero el problema lo tengo cuando quiero mandar un ejecutable, el servidor lo recibe pero vacio :s osea 0 kb  la verdad no tengo la menor idea de cual puede ser el problema alguien me podria dar una mano? en cual es el error o el problema? se lo agradeceria mucho ya que estoy estancado en mi programa por este problema :s les dejo el codigo:
Código
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
 Socket: TCustomWinSocket);
var
 size: Integer;
 strcom, com:string;
 nreceived,i:integer;
 Stream:  TMemoryStream;
 buffer: array  [0..99999] of char;
begin
strcom:=Socket.ReceiveText;
if pos('TOMA',strcom)=1 then
 begin
       Stream := TMemoryStream.Create;
       Screen.Cursor := crHourglass;
       try
         while True do
         begin
           nReceived := Socket.ReceiveBuf (Buffer, sizeof (Buffer));
           if nReceived <= 0 then
             Break
           else
             Stream.Write (Buffer, nReceived);
           Sleep (200);
         end;
         Stream.Position := 0;
         stream.SaveToFile('C:\Prueba.txt');
       finally
         Stream.Free;
         Screen.Cursor := crDefault;
       end;
 end;
Bueno espero que alguien me pueda ayudar
gracias y saludos



En línea

Experiencia es el nombre que le damos a nuestros errores
Khronos14

Desconectado Desconectado

Mensajes: 285


A lie is a lie


Ver Perfil WWW
Re: Problema: delphi, socket y envios de archivos
« Respuesta #1 en: 14 Mayo 2011, 11:05 »

Por lo que veo en tu código haces cosas poco recomendable.

Un bucle infinito sin sentido, la condición que usas para el break la puedes usar para salir del bucle. El sleep no pinta nada, y la rutina como no se ejecuta en un thread te falta un Application.ProcessMessages dentro del bucle para que no se te congele la aplicación.

Deberías poner el código del socket que envía el archivo.

Saludos.


En línea

N3Tw0lf

Desconectado Desconectado

Mensajes: 20


NETwolf


Ver Perfil
Re: Problema: delphi, socket y envios de archivos
« Respuesta #2 en: 14 Mayo 2011, 20:59 »

Hola, antes que nada muchas gracias por responder ,al fin alguien me puede dar una ayuda ;-), bueno la vdad no tengo la menor idea de como manejar esto de enviar y recibir archivos por socket el codigo lo saque de otro foro y fui trantando de entenderlo ejecutandolo varias veces y cambiandole algunas cosas. Te dejo el codigo que envia el archivo:
Código
procedure TForm1.Button1Click(Sender: TObject);
var
strm:TMemoryStream;
begin
strm:=TMemorystream.Create;
strm.LoadFromFile('C:\Pruebaa.txt');
clientsocket1.Socket.SendText('TOMA');
clientsocket1.socket.SendStream(strm);
end;
 
Teniendo el archivo una extension .txt el code transporta el archivo bien sin ningun error pero cuando intento combiar la extension a .exe (un ejecutable) el archivo se crea pero vacio.

Bueno espero que me puedas ayudar
saludos.

En línea

Experiencia es el nombre que le damos a nuestros errores
Khronos14

Desconectado Desconectado

Mensajes: 285


A lie is a lie


Ver Perfil WWW
Re: Problema: delphi, socket y envios de archivos
« Respuesta #3 en: 14 Mayo 2011, 22:33 »

¿Que versión de Delphi estás utilizando? Porque si tu versión de Delphi tiene UNICODE hay que hacerlo de una forma u otra, ya que las variables string, char y pchar tienen un valor distinto.

Saludos.
En línea

N3Tw0lf

Desconectado Desconectado

Mensajes: 20


NETwolf


Ver Perfil
Re: Problema: delphi, socket y envios de archivos
« Respuesta #4 en: 14 Mayo 2011, 23:09 »

Delphi 7 ,perdona por no poner todos los datos  :-\,

Saludos
En línea

Experiencia es el nombre que le damos a nuestros errores
el-viejo


Desconectado Desconectado

Mensajes: 1.257



Ver Perfil WWW
Re: Problema: delphi, socket y envios de archivos
« Respuesta #5 en: 15 Mayo 2011, 01:15 »

talvez mi respuesta no resuelva tu probema, pero por si a caso...

Te recomiendo este interesante material.

Windows Socket Programming using the WinSock API

ttp://www.felix-colibri.com/papers/web/socket_programming/socket_programming.html

A mi personalmente los componentes indy nunca me han gustado.

No hay nada mejor que usar la API

aqui puedes encontrar mucho material http://www.delphibasics.info/

suerte.

saludos...
En línea

N3Tw0lf

Desconectado Desconectado

Mensajes: 20


NETwolf


Ver Perfil
Re: Problema: delphi, socket y envios de archivos
« Respuesta #6 en: 15 Mayo 2011, 02:01 »

Hola , muchas gracias por interesarte, el primer enlace lo conocia y esta bueno, el segundo enlace no me sirvio de mucho, igual te lo agradezco nuevamente, concordamos en algo por lo menos jeje a mi tampoco me gustan las indy :P. hay >_< espero que alguien me pueda ayudar por que ya ase mas de una semana estoy tratando de buscar la respuesta a mi problema u.u

Espero mas respuestas por favor

Saludos.
« Última modificación: 15 Mayo 2011, 02:03 por N3Tw0lf » En línea

Experiencia es el nombre que le damos a nuestros errores
Khronos14

Desconectado Desconectado

Mensajes: 285


A lie is a lie


Ver Perfil WWW
Re: Problema: delphi, socket y envios de archivos
« Respuesta #7 en: 17 Mayo 2011, 00:55 »

El principal problema está en la función SendStream, que no envía archivos mayores que 8192 bytes, no se porqué. La solución es hacer un pequeño algoritmo para que lea del fichero y a la vez los mande por un socket.

Código
unit Unit1;
 
interface
 
uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, ScktComp, StdCtrls;
 
type
 TFMain = class(TForm)
   ClientSocket1: TClientSocket;
   ServerSocket1: TServerSocket;
   Button1: TButton;
   procedure FormCreate(Sender: TObject);
   procedure Button1Click(Sender: TObject);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure FormDestroy(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;
 
var
 FMain: TFMain;
 fsToReceive: TFileStream;
 
implementation
 
{$R *.dfm}
 
procedure TFMain.Button1Click(Sender: TObject);
var
Buff: array [0..1023] of byte;
BytesRead: integer;
fsToSend: TFileStream;
begin
 try
   fsToSend:= TFileStream.Create('C:\prueba.mp3', fmOpenRead or fmShareDenyWrite);
   fsToSend.Seek(0, 0);
 
   repeat
     FillChar(Buff, 1024, 0);
     BytesRead:= fsToSend.Read(Buff, 1024);
     Application.ProcessMessages;
     if BytesRead > 0 then
       ServerSocket1.Socket.Connections[0].SendBuf(Buff, SizeOf(Buff));
   until fsToSend.Position = fsToSend.Size;
 
 finally
   fsToSend.Free;
 end;
end;
 
procedure TFMain.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var
BytesRead: integer;
Buff: array [0..1023] of byte;
begin
 if Assigned(fsToReceive) = false then
   fsToReceive:= TFileStream.Create('C:\recibido.mp3', fmCreate or fmOpenReadWrite);
 
 FillChar(Buff, 1024, 0);
 BytesRead:= Socket.ReceiveBuf(Buff, 1024);
 fsToReceive.Write(Buff, BytesRead);
end;
 
procedure TFMain.FormCreate(Sender: TObject);
begin
 try
   ServerSocket1.Active:= True;
   ClientSocket1.Active:= True;
 Except on Exception do
   raise Exception.Create('Ocurrió con el servidor o con el cliente');
 end;
end;
 
procedure TFMain.FormDestroy(Sender: TObject);
begin
 if Assigned(fsToReceive) then
   fsToReceive.Free;
end;
 
end.
 
 

Aquí la prueba la hice enviando desde el servidor, pero sería lo mismo desde el cliente.

Saludos.
En línea

N3Tw0lf

Desconectado Desconectado

Mensajes: 20


NETwolf


Ver Perfil
Re: Problema: delphi, socket y envios de archivos
« Respuesta #8 en: 17 Mayo 2011, 05:29 »

Primero que nada muchas gracias la verdad, pense que nadie se iba a interesar en esto gracias de verdad.

Ahora tengo el problema que no me manda nada es como si nunca leyera nada el socket :huh: la verdad no se, tenia una duda que plantearte en tu codigo no usaste el envio de texto antes que los datos, es por algo en especial? no se necesita identificar lo envio con un texto clave? bueno voy a seguir probando con tu codigo tal vez es una falla mia cualquier cosa vuelvo a preguntar en este mismo post

Muchas gracias de verdad

Saludos

EDITO:
Lo volvi a hacer todo desde el principio las aplicaciones me llegan incompletas  :-( y al querer ejecutarlas me aparece Error el archivo no es una aplicacion WIN32

al compararla con el tamaño del original faltan mas de la mitad de los kb del mismo :s. Disculpame que te joda tanto posta me estas dando una re mano con esto espero que me puedas ayudar a terminarlo

Gracias y saludos


« Última modificación: 17 Mayo 2011, 05:58 por N3Tw0lf » En línea

Experiencia es el nombre que le damos a nuestros errores
Khronos14

Desconectado Desconectado

Mensajes: 285


A lie is a lie


Ver Perfil WWW
Re: Problema: delphi, socket y envios de archivos
« Respuesta #9 en: 17 Mayo 2011, 17:38 »

El código que te puse a mi me funciona perfectamente. En el Form solo tengo un botón, un TClientSocket y un TServerSocket.

Saludos.
En línea

N3Tw0lf

Desconectado Desconectado

Mensajes: 20


NETwolf


Ver Perfil
Re: Problema: delphi, socket y envios de archivos
« Respuesta #10 en: 17 Mayo 2011, 23:34 »

Te molestaria mucho mandarme el ejemplo por favor.      O ponerme un link de donde descargarlo ? . Te llego el mensaje que te mande?


Muchas gracias y disculpa las molestias

Saludos. :D
En línea

Experiencia es el nombre que le damos a nuestros errores
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Programacion de socket en delphi
Programación General
Gauxito 2 626 Último mensaje 17 Enero 2004, 13:37
por Gauxito
Cómo enviar archivos vía socket en java
Java
Nekro_Psycho 0 9,591 Último mensaje 10 Enero 2006, 21:29
por Nekro_Psycho
Delphi y Socket
Programación General
WarGhost 4 572 Último mensaje 3 Mayo 2006, 14:09
por WarGhost
como hago transferencia de archivos con socket?
Programación C/C++
Belial & Grimoire 2 1,992 Último mensaje 21 Noviembre 2009, 05:49
por Belial & Grimoire
Socket en delphi y sus manejos
Programación General
N3Tw0lf 3 1,305 Último mensaje 22 Mayo 2011, 14:26
por skapunky
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines