BCB语言解答如何获取本机IP ( 积分: 100 )

  • 主题发起人 主题发起人 haoyunp
  • 开始时间 开始时间
H

haoyunp

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如何获取本机IP
我的程序中是这样写的:
struct hostent *hostname;
struct in_addr in;
char *IP,*ptr;
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);
Edit1->Text=AnsiString(IP);
但获取的ip为:127.88.209.119
我自己设的ip为:192.168.0.33
网上只有delphi的,请问c++ build 的如何写?
 
请问如何获取本机IP
我的程序中是这样写的:
struct hostent *hostname;
struct in_addr in;
char *IP,*ptr;
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);
Edit1->Text=AnsiString(IP);
但获取的ip为:127.88.209.119
我自己设的ip为:192.168.0.33
网上只有delphi的,请问c++ build 的如何写?
 
//试用以下代码:
struct hostent *hostname;
struct in_addr in;
char *IP,*ptr;
if(!(hostname=gethostbyname((char FAR*)(DnText2->Text.c_str()))))
{
Application->MessageBox("错误","出错信息",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);
Ip2->Text=AnsiString(IP);
 
DnText2->Text//指的是本机名称
 
#include "Winsock2.h"
#include "stdio.h"
void __fastcall GetMyIP(char *szIP)
{
char szHostName[256];
char szBuf[(3+1)*4+1];
struct hostent FAR *pHost;
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
if(gethostname(szHostName, 256) == SOCKET_ERROR)
{
ShowMessage(String("WinSock error: ") + String(WSAGetLastError()));
}
else
{
pHost=gethostbyname(szHostName);
sprintf(szBuf, "%u.%u.%u.%u",
pHost->h_addr_list[0][0]&0xFF,
pHost->h_addr_list[0][1]&0xFF,
pHost->h_addr_list[0][2]&0xFF,
pHost->h_addr_list[0][3]&0xFF
);
strcpy(szIP, szBuf);
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
char szIp[17];
GetMyIP(szIp);
ShowMessage(szIp);
}
 
char hostname[20];
struct sockaddr_in local;
String ip;

ZeroMemory(hostname,20);
gethostname(hostname,20);
HOSTENT *ip_addr=gethostbyname(hostname);
memcpy(&local.sin_addr,*(ip_addr->h_addr_list),sizeof(local.sin_addr));
ip=inet_ntoa(local.sin_addr);
 
后退
顶部