Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-04-2011
Avatar de NETwolf
NETwolf NETwolf is offline
Registrado
NULL
 
Registrado: abr 2011
Posts: 2
Poder: 0
NETwolf Va por buen camino
Question Socket y directorios en delphi

Hola que tal mundo, soy nuevo en el foro asi que pido mil disculpas si es que me equivoque de seccion. Eh aca mi problema:

Estoy haciendo un programa con sockets de delphi y lo que quiero que haga mi programa es que cuando , tanto el server como el cliente se conecten, ambos puedan compartir los directorios y archivos que tiene en sus computadoras de origen. Pero no se como hacer para que mis datos se pasen de un socket a otro ya que la otra ves buscando si encontre como hacer para navegar a traves de mis directorios y archivos con un memo y un edit pero no puedo hacer que esos datos sean pedidos y concedios, tanto por el server como el cliente. Este es el ejemplo que encontre para poder visualizar todos los datos en un memo a traves de las direcciones puestas en un edit:


Código Delphi [-]
procedure ListaDirectorios(var lista:
  TStrings; dirPadre: string);
var
  SR: TSearchRec;
begin
  dirPadre := IncludeTrailingPathDelimiter(dirPadre);
  FindFirst(PChar(dirPadre + '*'), faDirectory, SR);
  repeat
    lista.Add(SR.Name);
  until (FindNext(SR) <> 0);
  FindClose(SR);
  end;
Código Delphi [-]
procedure TForm1.ClienteRead(Sender: TObject; Socket: TCustomWinSocket);
var
directorios: TStrings;
begin
if directoryexists(edit1.text) then
begin
directorios := TStringList.Create;
ListaDirectorios(directorios, edit1.text);
memo1.lines.add(directorio.text);
directorios.Free;
end
end;

Bueno reitero la pregunta, ¿como puedo hacer para que los datos de direcotorios y archivos que tenga una computadora sean transferidos a servidor con las direcciones que proporcione este mismo y viceversa

De antemano muchisimas gracias

y saludos

PD: ya quise ver que pasaba cuando le pedia al cliente los datos a trabes del servidor pero me salia el error sendto(10057) y me dice que el socket no esta conectado y que por eso no se pueden enviar los datos. Pero el socket si estaba conectado y despues se cierra la conexion
Responder Con Cita
  #2  
Antiguo 01-07-2011
maxinitto maxinitto is offline
Miembro
 
Registrado: may 2010
Posts: 45
Poder: 0
maxinitto Va por buen camino
puedes usar la misma funcion que usas para listar tus directorios pero en el servidor y que dicho servidor vaya guardando cada directorio separado por un split me explico...

imagina que queremos leer c:\ pues si tienes 10 carpetas en c tu funcion para leer los directorios usara un bucle desde 0 a 9 entonces en dicho bucle tienes que hacer

Código Delphi [-]
directorios := directorios + nombreobtenidodelservidor + '|';
cuando termine el bucle te qdara una cadena fea de larga que envias desde el servidor al cliente usando
Código Delphi [-]
Servidor.socket.sendText(directorios);
y en el cliente usa la funcione explode que es para kitar los split me explico

Código Delphi [-]
function Explode(const Separator, S: string; Limit: Integer = 0): TStringDynArray;    // Para partir split de los datos del socket conectado.
var
  SepLen: Integer;
  F, P: PChar;
  ALen, Index: Integer;
begin
  SetLength(Result, 0);
  if (S = '') or (Limit < 0) then Exit;
  if Separator = '' then
  begin
    SetLength(Result, 1);
    Result[0] := S;
    Exit;
  end;
  SepLen := Length(Separator);
  ALen := Limit;
  SetLength(Result, ALen);

  Index := 0;
  P := PChar(S);
  while P^ <> #0 do
  begin
    F := P;
    P := AnsiStrPos(P, PChar(Separator));
    if (P = nil) or ((Limit > 0) and (Index = Limit - 1)) then P := StrEnd(F);
    if Index >= ALen then
    begin
      Inc(ALen, 5);
      SetLength(Result, ALen);
    end;
    SetString(Result[Index], F, P - F);
    Inc(Index);
    if P^ <> #0 then Inc(P, SepLen);
  end;
  if Index < ALen then SetLength(Result, Index);
end;

declara esta variable
Código Delphi [-]
 Resultado : TStringDynArray;

si tienes hola|mellamo|pepe lo que hace esa funcion es que al tu pasarle un array
Código Delphi [-]
Resultado := Explode('|', Cliente.Socket.ReceiveText);
te quedaria un array con el nombre Resultado y con 3 elementos
Código Delphi [-]
Resultado[1] := 'hola';
Resultado[2] := 'mellamo';
Resultado[3] := 'pepe';

y nada un pequeño bulce y lo imprimes en tu memo o listview.
si tienes mas duda pregunta
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
NMFTP :Error 10038 Socket operation on non socket judit Internet 2 25-05-2006 09:06:33
Creación de directorios en tiempo de ejecución desde aplicación Delphi vick Conexión con bases de datos 1 16-12-2005 21:18:17
Creación de directorios en tiempo de ejecución desde aplicación Delphi vick API de Windows 1 16-12-2005 21:13:35
Socket en Delphi android_beat Varios 11 12-04-2005 18:33:29
Socket Windows XP Delphi epalacios Varios 0 16-03-2004 12:38:36


La franja horaria es GMT +2. Ahora son las 06:20:46.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi