C++Builder中,如何得到拨号上网后的ip 地址?(200分)

  • 主题发起人 主题发起人 Action
  • 开始时间 开始时间
A

Action

Unregistered / Unconfirmed
GUEST, unregistred user!
C++Builder中,如何得到拨号上网后的ip 地址?
C++Builder中,如何在不输入用户名和密码的情况下下载服务器上的某个文件到指定目录。
例如我下载某个个人主页的一个文件a.zip.(http://www.nease.net/~aaa/a.zip)到我的机子的d:/aa/下面。
 
不会吧,Jams的">>"也算是回答。。
 
我的例子是DELPHI,在CBC中差不多。
procedure TForm1.Button1Click(Sender: TObject);
const
MaxConnections = 10;//假设最多有10个活动的拨号连接
var
connections : array[0..MaxConnections-1] of RASCONN;
//拨号连接数组
longSize : dword;
intAvailabelConnections : dword;
//活动的拨号连接的实际数目
intIndex : integer;
strTemp : string;
dwResult : DWORD;
dwSize : DWORD;
RASpppIP : TRASPPPIP;
//活动的拨号连接的动态IP地址信息
begin
connections[ 0 ].dwSize := sizeof(RASCONN);
longSize := MaxConnections * connections[ 0 ].dwSize;
//接收活动连接的缓冲区大小
intAvailabelConnections := 0;
//获取所有活动的拨号连接的信息(连接句柄和设置信息)
dwResult := RasEnumConnections( connections[ 0 ],
longSize,intAvailabelConnections );
if 0 < > dwResult then
memo1.lines.add( '错误:' + inttostr( dwResult ) )
else
begin
memo1.lines.add( '现有的活动连接有' +
IntToStr( intAvailabelConnections ) + '个');
//显示所有活动的拨号连接的信息(设置信息和动态IP地址)
for intIndex := 0 to intAvailabelConnections - 1 do
begin
//显示一个活动的拨号连接的设置信息
strTemp := '连接名称:'
+ StrPAS( connections[ intIndex ].szEntryName )
+ ',设备类型:'
+ StrPAS( connections[ intIndex ].szDeviceType )
+ ',设备名称:'
+ StrPAS( connections[ intIndex ].szDeviceName );
memo1.lines.add( strTemp );
//显示一个活动的拨号连接的动态IP地址
dwSize := SizeOf(RASpppIP);
RASpppIP.dwSize := dwSize;
dwResult := RASGetProjectionInfo
( connections[ intIndex ].hRasConn,
RASP_PppIp,RasPPPIP,dwSize);//获取动态IP地址
if 0 < > dwResult then
memo1.lines.add(
'错误:' + inttostr( dwResult ))
else
memo1.lines.add(
'动态地址:' + StrPas(RASpppIP.szIPAddress));
end;
end;
end;

 
eguy,谢谢你,你这种方法能适用于所有动态ip地址的寻找吗?如ADSL,
 
试试吧:
#include<winsock.cpp>
#include <winsock.h>
AnsiString __fastcall TForm1::GetIp()
{
TWSAData WSData;
char Buffer[64];
PHOSTENT HostEnt;
PInAddr *PPInAddr;
DWord LocalIP;
AnsiString IPString;
LocalIP=0;
IPString="";
WSAStartup(101,&WSData);
try
{
gethostname(Buffer,sizeof(Buffer));
HostEnt=gethostbyname(Buffer);
if (HostEnt!=NULL)
{
PPInAddr=(PInAddr *)HostEnt->h_addr_list;
while (PPInAddr!=NULL)
{

IPString=StrPas(inet_ntoa(**PPInAddr));
//LocalIP=PPInAddr->S_Addr;
PPInAddr++;
}
}
}
catch(...)
{
WSACleanup();
}
return (IPString);
}
 
多人接受答案了。
 
后退
顶部