Delphi - IP

 
Vista:

IP

Publicado por Erick (7 intervenciones) el 01/11/2005 09:33:46
Estoy programando una aplicacion utilizando sockets en delphi, misma que utilizare en dos maquinas en red que tendran un socketclient y un socketserver, tomemos que tengo varios maquinas corriendo el mismo server y me gustaria antes de conectar mi socket cliente a algun server, ver una lista de las direcciones ip que hay en mi red y que tienen un server dado de alta.

si existe un componente o propiedad de algun componente para obtener las direcciones ip de una red en delphi (en este caso tomando encuenta que me visualizara las direcciones ip en las que tengo un server conectado) haganmelo saber, lo necesito, gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:IP

Publicado por BigLuis (713 intervenciones) el 01/11/2005 10:08:20
Prueba esto. A mi me funciona muy bien.Obtiene los pares Nombre del equipo-IP
La llamada se implementa por ejemplo de esta forma (para mas parametros mira la ayuda)

ScanNetworkResources(RESOURCETYPE_DISK, RESOURCEDISPLAYTYPE_SERVER, ListBox1.Items);

function CreateNetResourceList(ResourceType: DWord;
NetResource: PNetResource;
out Entries: DWord;
out List: PNetResourceArray): Boolean;
var
EnumHandle: THandle;
BufSize: DWord;
Res: DWord;
begin
Result := False;
List := Nil;
Entries := 0;
if WNetOpenEnum(RESOURCE_GLOBALNET,
ResourceType,
0,
NetResource,
EnumHandle) = NO_ERROR then begin
try
BufSize := $4000; // 16 kByte
GetMem(List, BufSize);
try
repeat
Entries := DWord(-1);
FillChar(List^, BufSize, 0);
Res := WNetEnumResource(EnumHandle, Entries, List, BufSize);
if Res = ERROR_MORE_DATA then
begin
ReAllocMem(List, BufSize);
end;
until Res <> ERROR_MORE_DATA;

Result := Res = NO_ERROR;
if not Result then
begin
FreeMem(List);
List := Nil;
Entries := 0;
end;
except
FreeMem(List);
raise;
end;
finally
WNetCloseEnum(EnumHandle);
end;
end;
end;

procedure ScanNetworkResources(ResourceType, DisplayType: DWord; List: TStrings{Memo1.Lines});

procedure ScanLevel(NetResource: PNetResource);
var
Entries: DWord;
NetResourceList: PNetResourceArray;
i: Integer;
begin
if CreateNetResourceList(ResourceType, NetResource, Entries, NetResourceList) then try
for i := 0 to Integer(Entries) - 1 do
begin
if (DisplayType = RESOURCEDISPLAYTYPE_GENERIC) or
(NetResourceList[i].dwDisplayType = DisplayType) then begin
List.AddObject(NetResourceList[i].lpRemoteName,
Pointer(NetResourceList[i].dwDisplayType));
List.Add(getipinfo(NetResourceList[i].lpRemoteName));
end;
if (NetResourceList[i].dwUsage and RESOURCEUSAGE_CONTAINER) <> 0 then
ScanLevel(@NetResourceList[i]);
end;
finally
FreeMem(NetResourceList);
end;
end;

begin
ScanLevel(Nil);
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:IP

Publicado por Erick (7 intervenciones) el 01/11/2005 19:54:37
ok lo probare, y gracias, en caso de que no me salga regresare......
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:IP

Publicado por Erick (7 intervenciones) el 04/11/2005 01:08:26
Tengo un problema con el codigo al momento de compilarlos me manda un error al pasar sobre esta instruccion - PNetResourceArray - , estoy usando delphi 6, cual sera el motivo del error ¿? orientame.

Otra pregunta donde puedo encontrar informacion sobre las funciones y tipo de datos que utilizas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:IP

Publicado por bIGlUIS (713 intervenciones) el 04/11/2005 07:09:27
Tienes que declarar antes el tipo (perdon fue un lapsus) antes del apartado implementation. Yo tambien utilizo Delphi 6.
//Lista de Resources
type
PNetResourceArray = ^TNetResourceArray;
TNetResourceArray = array[0..100] of TNetResource;

implementation

Sobre TNetResource puedes encontrar cosas en las unidades Windows.pas, ShlObj.pas y SysUtils.pas

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:IP

Publicado por erick (3 intervenciones) el 04/11/2005 16:49:49
Me mando un error por que me imagino que faltaba declarar - ResourceType,Displaytype - en la seccion de variables dentro de la funcion ScanLevel(). Bueno ya resolvi eso pero ahora me manda error en la funcion - getipinfo() - me imagino por que falta declarar la unidad en la clausula uses, ¿que unidad es por que ni idea?, por si no lo encuentro la respuesta investigando en otro lado, y gracias por el mandarme lo que hacia falta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:IP

Publicado por BigLuis (713 intervenciones) el 04/11/2005 17:04:59
Perdona Erik, pero fui copiando de un proyecto que hace mucho tiempo que no toco y claro no recuerdo exactamente como estaba implementado. Te falta la funcion getipinfo que es esta. Si te sigue dando errores, no dudes en decirlos y los iremos solucionando.

function GetIPinfo(Usuario:String):String;
var
WSAData: TWSAData;
HostEnt: PHostEnt;
Nombre,Direccion : String;
begin // no error checking...
Result:='';
try
WSAStartup(2, WSAData);
SetLength(Nombre, 255);
Nombre:=copy(Usuario,3,255);
//Gethostname(PChar(Nombre), 255);
SetLength(Nombre, StrLen(PChar(Nombre)));
HostEnt := gethostbyname(PChar(Nombre));
with HostEnt^ do
Direccion := Format('%d.%d.%d.%d',[Byte(h_addr^[0]),Byte(h_addr^[1]),Byte(h_addr^[2]),Byte(h_addr^[3])]);
Result:=Direccion;
finally
WSACleanup;
end;
end;

Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:IP

Publicado por Erick (7 intervenciones) el 08/11/2005 02:10:17
Listo, hermano, salio perfecto, acabas de salvarme el semestre en una materia (lo malo es que me faltan mas), muchas gracias y mas gracias.

Chao
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar