怎样才能获取客户端IP地址(100分)

  • 主题发起人 主题发起人 李正文
  • 开始时间 开始时间

李正文

Unregistered / Unconfirmed
GUEST, unregistred user!
本人在开发一B/S应用时需取得客户端IP信息
望高手指点。
E-mail: lzw@mail.hrbucea.edu.cn
 
In TWebModule's Action, there is a parameter "request: TWebRequest;"
You can use this request to retrieve a user's ip address:

ip := Request.host;

Here ip is a string type, such as '170,0,0,0'
 
B/S模式下Server无法直接获取Client的任何信息,
但可以在远程方法中增加一个参数,Client将IP
地址作为参数传过来即可。

取本机IP的代码如下:
var
var
WSData:TWSAData;
Buffer:array[0..63]of Char;
HostEnt:PHostEnt;
PPInAddr:^PInAddr;

//取得的IP地址
//DWORD格式
LocalIP:DWord;
//字符串格式
IPString:String;
begin
LocalIP:=0;
IPString:='';
WSAStartUp($101,WSData);
try
GetHostName(Buffer,SizeOf(Buffer));
HostEnt:=GetHostByName(Buffer);
if Assigned(HostEnt) then
begin
PPInAddr:=@(PInAddr(HostEnt.H_Addr_List^));
while Assigned(PPInAddr^) do
begin
IPString:=StrPas(INet_NToA(PPInAddr^^));
LocalIP:=PPInAddr^^.S_Addr;
Inc(PPInAddr);
end;
end;
finally
WSACleanUp;
end;
end;
 
同意李颖,可在客户端连接时让客户端把IP发过来!
 
我认为也可以这么作:

在服务器端加一个TServerSocket控件,把Port指定为

80,用于监听客户端的请求。在ServerSocket的控件的

属性里可以得到客户的IP地址。

这种方法有点象NT下的日志!

其实客户发过来的TCP包里肯定有IP!

只要截获包里的信息也可以得到!
 
其实delphi并不适用net编程,
asp倒是不错。
 
uses Winsock;

procedure TForm1.FormCreate(Sender: TObject);
var
wVersionRequested : WORD;
wsaData : TWSAData;
begin
{Start up WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
end;

procedure TForm1.Button1Click(Sender: TObject);
var p : PHostEnt;
s : array[0..128] of char;
p2 : pchar;
begin
{Get the computer name}
GetHostName(@s, 128);
p := GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{Get the IpAddress}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
{Shut down WinSock}
WSACleanup;
end;
 
在JAVA SERVERLET里能很方便的拿到客户端的地址,比如下面的语句:
String remoteAddr = req.getRemoteAddr();
 
用Winsocket库提供的GetHostByName API函数。
 
在TWebModule's Action中
Request.Host返回服务器的IP地址,为String型;
Request.RemoteHost返回客户端IP地址,也为String型;
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
764
DelphiTeacher的专栏
D
D
回复
0
查看
738
DelphiTeacher的专栏
D
D
回复
0
查看
691
DelphiTeacher的专栏
D
后退
顶部