双网卡时,找IP地址的问题,耽误高手两分钟! (100分)

  • 主题发起人 福利彩票
  • 开始时间

福利彩票

Unregistered / Unconfirmed
GUEST, unregistred user!
请问:当我有两个网卡的时候,怎样同时读出两个网卡的IP地址?
 
使我问得不对吗?帮帮我吧!
 
不是我不帮你,是我不知道啊
 
我也想知道
 
没用过两块网卡,看看以下能不能取出所有地址,先不管它是哪一快的:

取得本机网络地址和名称

unit Tools;

interface
uses Windows,WinSock,SysUtils;

function LocalIP : string;
function LocalComputerName : string;

implementation

{$R *.DFM}

function LocalIP : string;
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;

begin
WSAStartup($101, GInitData);
Result := '';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do begin
result:=StrPas(inet_ntoa(pptr^^));/////////// 把每个都显示一下
Inc(I);
end;
WSACleanup;
end;

function LocalComputerName : string;
var
Buffer : pchar;
I : Integer;
begin
getmem(buffer,100);
i:=99;
GetComputerName(Buffer,i);
Result := string(Buffer);
freemem(buffer);
end;

 
//双网卡一般一块连接局域网,接HUB或SWICH(对内),另一块连出接路由(对外)


unit untGetIP;

interface

uses
SysUtils,WinSock,Windows;

function GetLocalIP:String; //得到IP地址,双网卡时为对外IP地址,ADSL拨号时为拨出分配的IP地址
function GetLocalComputerName:String;
function nametoip(name:string):string; //通过机器名得到IP地址,双网卡时为对内IP地址

implementation

function GetLocalIP:String; //得到IP地址,双网卡时为对外IP地址
type
TaPInAddr = array [0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe : PHostEnt;
pptr : PaPInAddr;
Buffer : array [0..63] of char;
I : Integer;
GInitData : TWSADATA;
begin
WSAStartup($101, GInitData);
try
Result:='';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^ <> nil do
begin
result:=StrPas(inet_ntoa(pptr^^));
Inc(I);
end;
finally
WSACleanup;
end;
end;

function GetLocalComputerName:String;
var
ComputerName:pChar;
Size:DWORD;
begin
GetMem(ComputerName,255);
Size:=255;
GetComputerName(ComputerName,Size);
Result:=ComputerName;
FreeMem(ComputerName);
end;

function nametoip(name:string):string; //通过机器名得到IP地址,双网卡时为对内IP地址
var
WSAData: TWSAData;
HostEnt: PHostEnt;
begin
result:='';
WSAStartup(2, WSAData);
HostEnt := gethostbyname(PChar(name));
if HostEnt <> nil then
begin
with HostEnt^ do
result:= Format('%d.%d.%d.%d',
[Byte(h_addr^[0]), Byte(h_addr^[1]),
Byte(h_addr^[2]), Byte(h_addr^[3])]);
end;
WSACleanup;
end;

end.
 
谢谢了,我还有一个打印缩放的问题,不知能否再帮我个忙?
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1342988
 
顶部