我做了一个Dll,仅仅是一个登陆的界面,该界面在打开后需要知道服务器的地址,
就是说你打开的是http://www.home.com/login.dll,要求该dll打开后,界面上有一个标题,显示的服务器是http://www.home.com或者是该服务器的IP地址.我的login.dll是用Intraweb做的.现在我设计Login.dll的时候在里面写什么才能够在login.dll上显示服务器的地址呢?
在线等待 50 分
就是说你打开的是http://www.home.com/login.dll,要求该dll打开后,界面上有一个标题,显示的服务器是http://www.home.com或者是该服务器的IP地址.我的login.dll是用Intraweb做的.现在我设计Login.dll的时候在里面写什么才能够在login.dll上显示服务器的地址呢?
在线等待 50 分
//获取本机IP地址
//InternetIP=TRUE 则为上网的Internet IP
Function GetLocalIp(InternetIP:boolean):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;
IP: String;
begin
try
WSAStartup($101, GInitData);
IP:='0.0.0.0';
GetHostName(Buffer, SizeOf(Buffer));
phe := GetHostByName(buffer);
if phe = nil then
begin
ShowMessage(IP);
Result:=IP;
Exit;
end;
pPtr := PaPInAddr(phe^.h_addr_list);
if InternetIP then
begin
I := 0;
while pPtr^[I] <> nil do
begin
IP := inet_ntoa(pptr^[I]^);
Inc(I);
end;
end
else
IP := inet_ntoa(pptr^[0]^);
WSACleanup;
Result:=IP;//如果上网则为上网ip否则是网卡ip
finally end;
end;
我要获得的是服务器的IP地址。因为Dll是放在了服务器。但是用户访问dll的时候,会显示返回的网页在用户的本机上。
一个登录页面,用户输入用户名称和密码,然后按确定按钮,我使用的是IntraWeb来做的。因此我需要在确定按钮按下的时候向服务器发送一个消息。告诉服务器当前有用户请求登录。但是我不知道消息发到哪里。
按理说,你从www.home.com上访问的dll,应当发到www.home.com中。但是,我的dll是一个商业软件,该软件不知道将安装在哪个地址上。因此我的程序中不能将按钮的消息发送给www.home.com,必须在用户访问dll的时候来确定该dll的服务器地址到底在哪里。
客户端通过URL访问, 是不放Intraweb程序的. Webapplication.ip就是客户端的IP.
我要写的实际是一个远程监控的东西。首先写一个网页,然后在网页上放一个INDY的TCPCLIENT和TCPSERVER控件。这样在用户打开网页的时候首先获得服务器的地址,然后通过TCPCLIENT控件发送给服务器本地的IP地址。服务器接受到IP地址后存储到数据库中。
服务器有一个报警监控的服务,在接受到报警信息后,从数据库中获得当前监控的计算机列表中的计算机,将报警信息按照TCP/IP包的模式发给远程监控的计算机。这样,我就不用使用TIMER等东西每各几秒去服务器那里的数据库请求新报警信息了。使用TCPIP直接发送我已经试验成功了,而且是通过网页实现的,感觉速度非常快,因此自我感觉良好。
因为不是做关于数据库的东西,因此我也懒得去管什么ORB,也不管什么远程的TABLE什么的,反正我现在数据量也不大,干脆自己麻烦点将所有数据都通过TCPIP来进行发送接受。这样从另外一个方面也将数据库和外部的网隔离了。
因此自己的程序才这么麻烦。不过第一次写这种网页,感觉挺不错的,毕竟是属于远程监控类的。不过现在是做报警信息的监控,回头如果老板一开心要做视频的监控,我肯定死菜。
我试试上面的程序先。
总之,先谢谢各位。
我做一般的DELPHI程序还凑合,毕竟做DELPHI是从2开始的,不过从2开始也有不好的地方,就是新东西不愿意去学。可怜。正象我在学校中由电子转软件时老师说的,做软件,太累,你要时刻学新东西,否则就会被淘汰。深有感受。