大侠请帮忙!

nxyc_twz 2002-07-31 09:51:03
谁能帮我把下面的这段DELPHI代码翻译成C++ BUILDER的代码?
function TMainForm.GetLocalIP: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);
try
Result:='';
GetHostName(Buffer, SizeOf(Buffer));
phe :=GetHostByName(buffer);
if phe = nil then Exit;
pptr := PaPInAddr(Phe^.h_addr_list);
I := 0;
while pptr^[I] <> nil do
begin
result:=StrPas(inet_ntoa(pptr^[I]^));
Inc(I);
end;
finally
WSACleanup;
end;
end;
...全文
53 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
Bird1945 2002-07-31
  • 打赏
  • 举报
回复
//得到本地计算机名.
char computer_name[MAX_COMPUTERNAME_LENGTH+1] ;
unsigned long length = MAX_COMPUTERNAME_LENGTH + 1 ;
if(!GetComputerName(computer_name,&length))
{
return;
}

楼上面的例子有很强的通用性,
你可以用他来取网上(局域网)任何一台计算机的ip和机器名.

Bird1945 2002-07-31
  • 打赏
  • 举报
回复
我不喜欢看BEGIN END,

看了你的功能后,是不是取本地的IP,

下面是我的程序中的一段代码;


//主机名和IP地址的互相获取
#include <winsock.h>


//创建一个socket
void __fastcall TForm1::FormCreate(TObject *Sender)
{
WORD wVersionRequested ;
WSADATA wsaData ;
int err ;
wVersionRequested = MAKEWORD(2,0) ;
err = WSAStartup(wVersionRequested,&wsaData) ;
if(err!=0)return ;
if (LOBYTE(wsaData.wVersion)!=2||
HIBYTE(wsaData.wVersion)!=0)
{
WSACleanup() ;
return ;
}
}
//---------------------------------------------------------------------------

//获取主机名
void __fastcall TForm1::Button1Click(TObject *Sender)
{
struct hostent * hostname ;
unsigned int addr ;
addr = inet_addr((char FAR*)(Edit1->Text.c_str())) ;
if(!(hostname = gethostbyaddr((char*)&addr,4,AF_INET)))
{
AnsiString Err ;
switch(WSAGetLastError())
{
case WSAENETDOWN :
Err = "The network subsystem has failed." ;
break ;
case WSAHOST_NOT_FOUND :
Err = "Authoritative Answer Host not found." ;
break ;
case WSATRY_AGAIN :
Err = "Non-Authoritative Host not found, or server failure." ;
break ;
case WSANO_RECOVERY :
Err = "Nonrecoverable error occurred." ;
break ;
case WSANO_DATA :
Err = "Valid name, no data record of requested type." ;
break ;
case WSAEINPROGRESS :
Err = "A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function." ;
break ;
case WSAEAFNOSUPPORT :
Err = "The type specified is not supported by the Windows Sockets implementation." ;
break ;
case WSAEFAULT :
Err = "The name argument is not a valid part of the user address space." ;
break ;
}
Application->MessageBox(Err.c_str(),"出错信息",MB_OKCANCEL) ;
return ;
}
Edit2->Text = AnsiString(hostname->h_name) ;
}
//---------------------------------------------------------------------------
//获取IP地址
void __fastcall TForm1::Button2Click(TObject *Sender)
{
struct hostent * hostname ;
struct in_addr in ;
char * IP,*ptr ;
if (!(hostname = gethostbyname((char FAR *)(Edit3->Text.c_str())) ))
{
AnsiString Err ;
switch(WSAGetLastError())
{
case WSAENETDOWN :
Err = "The network subsystem has failed." ;
break ;
case WSAHOST_NOT_FOUND :
Err = "Authoritative Answer Host not found." ;
break ;
case WSATRY_AGAIN :
Err = "Non-Authoritative Host not found, or server failure." ;
break ;
case WSANO_RECOVERY :
Err = "Nonrecoverable error occurred." ;
break ;
case WSANO_DATA :
Err = "Valid name, no data record of requested type." ;
break ;
case WSAEINPROGRESS :
Err = "A blocking Windows Sockets 1.1 call is in progress, or the service provider is still processing a callback function." ;
break ;
case WSAEFAULT :
Err = "The name argument is not a valid part of the user address space." ;
break ;
}
Application->MessageBox(Err.c_str(),"出错信息",MB_OKCANCEL) ;
return ;
}
memset((void *)&in,sizeof(in),0) ;
in.s_addr = *((unsigned long*)hostname->h_addr_list[0]) ;
if (!(ptr = inet_ntoa(in)))
{
return ;
}
IP = new char[strlen(ptr)+1] ;
strcpy(IP,ptr) ;
Edit4->Text = AnsiString(IP) ;



}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit3Change(TObject *Sender)
{
Edit4->Text = "" ;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Edit1Change(TObject *Sender)
{
Edit2->Text = "" ;
}
//---------------------------------------------------------------------------

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧