用什么函数可以得到机子的ip地址啊,急!!!! 急!!!帮帮忙!!! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 如下几种方法共参考1、 bool GetIP1(){ bool m_bVeri = false; addrinfo hints, *result = NULL; memset(&hints, 0, sizeof(hints)); hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = IPPROTO_TCP; char szhostname[128]; gethostname(szhostname,sizeof(szhostname)); if (getaddrinfo(static_cast<LPCTSTR>(szhostname), 0, &hints, &result) != 0) return m_bVeri; //if (getnameinfo(result->ai_addr, result->ai_addrlen, m_sIP, 256, NULL, 0, NI_NUMERICHOST) != 0) // return m_bVeri; m_bVeri = true; addrinfo* paddr; paddr=result; int i=0; while(paddr!=NULL) { char tmp[256]; wsprintf(tmp,"the %d address name:%s,",i,paddr->ai_canonname); OutputDebugString(tmp); print_sockaddr(paddr->ai_addr); paddr=paddr->ai_next; } freeaddrinfo(result); return m_bVeri; }2、 假设你有了名为My的对话框工程.有一个按钮并有响应的程序:如OnButton1(); BOOL CListCtrl1Dlg::OnInitDialog() { CDialog::OnInitDialog(); AfxSocketInit(NULL);//支持Socket.若在向导是没选Support Socket,这就的加.还要加#include <afxsock.h>在StdAfx.h中. ....... // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } void CListCtrl1Dlg::OnButton1() { WORD wVersionRequested; WSADATA wsaData; char name[255]; CString ip; PHOSTENT hostinfo; wVersionRequested = MAKEWORD( 2, 0 ); if ( WSAStartup( wVersionRequested, &wsaData ) == 0 ) { if( gethostname ( name, sizeof(name)) == 0) { if((hostinfo = gethostbyname(name)) != NULL) { ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); } } WSACleanup( ); } AfxMessageBox(name);//name里是本机名 AfxMessageBox(ip); //ip中是本机IP } 3、// TODO: 获得本机的IP地址。子网掩码。广播地址STDMETHODIMP CSysInfo::GetIPsAddress(BSTR *pIPAddress,BSTR *pSubnetVal,BSTR *pBroadcastAddr,int* pIPsCounter){ wchar_t strIPAddress[1000]; ::ZeroMemory(&strIPAddress,sizeof(strIPAddress)); wchar_t strSubnetMask[1000]; ::ZeroMemory(&strSubnetMask,sizeof(strSubnetMask)); wchar_t strBroadcastAddr[1000]; ::ZeroMemory(&strBroadcastAddr,sizeof(strBroadcastAddr)); char cBuffer[10000]; ::ZeroMemory(&cBuffer,sizeof(cBuffer)); PMIB_IPADDRTABLE pTable = (PMIB_IPADDRTABLE)cBuffer; DWORD dwSize = sizeof(cBuffer); if(GetIpAddrTable(pTable,&dwSize,FALSE) == NO_ERROR) { wchar_t strIPItem[100]; *pIPsCounter = pTable->dwNumEntries; for(int i=0;i< *pIPsCounter;i++) { DWORD addr = pTable->table[i].dwAddr; DWORD subnet = pTable->table[i].dwMask; DWORD broadcast = pTable->table[i].dwBCastAddr; // Filter 127.0.0.1 if (addr != 0x0100007f) { ::ZeroMemory(&strIPItem,sizeof(strIPItem)); swprintf(strIPItem,L"%d.%d.%d.%d",(addr & 0xFF),((addr >> 8) & 0xFF),((addr >> 16) & 0xFF),((addr >> 24) & 0xFF)); wcscat(strIPAddress,strIPItem); ::ZeroMemory(&strIPItem,sizeof(strIPItem)); swprintf(strIPItem,L"%d.%d.%d.%d",(subnet & 0xFF),((subnet >> 8) & 0xFF),((subnet >> 16) & 0xFF),((subnet >> 24) & 0xFF)); wcscat(strSubnetMask,strIPItem); ::ZeroMemory(&strIPItem,sizeof(strIPItem)); swprintf(strIPItem,L"%d.%d.%d.%d",(broadcast & 0xFF),((broadcast >> 8) & 0xFF),((broadcast >> 16) & 0xFF),((broadcast >> 24) & 0xFF)); wcscat(strBroadcastAddr,strIPItem); } } } *pIPAddress = SysAllocString(strIPAddress); *pSubnetVal = SysAllocString(strSubnetMask); *pBroadcastAddr = SysAllocString(strBroadcastAddr); return S_OK;} 我们用ipconfig时总会看得到ip地址,可否这样呢:system("ipconfig>a.txt")执行这个语句后会在相应的目录里有一个a.txt其内容如下:Windows 2000 IP ConfigurationEthernet adapter 本地连接: Connection-specific DNS Suffix . : IP Address. . . . . . . . . . . . : 10.88.109.237 Subnet Mask . . . . . . . . . . . : 255.255.254.0 Default Gateway . . . . . . . . . : 10.88.108.2你可以打开它取行ip地址!见笑啦,我vc不怎么样!不过可以考虑考虑这个方法! 用这个:// Get computer name char szComputerName[128]; DWORD dwLen = 128; ::GetComputerName(szComputerName, &dwLen); // Get local IP CString csLocalIP = _T(""); HOSTENT *pHostent = gethostbyname(szComputerName); unsigned char chIP[4]; memcpy(chIP, *(pHostent->h_addr_list), 4); csLocalIP.Format("%d.%d.%d.%d", chIP[0], chIP[1], chIP[2], chIP[3]); ComboBox控件 IsWindow() 5.1结婚,散分 地址线为16的CPU,它的虚拟存储器的寻址范围为多少呢?? 菜鸟提问:关于在vsiual studio.net2003中使用c++语言 oracle服务已联上,但ODBC连不上,请高手解决,另开200分相送,急!!1 检查SQL语法的正确性,请您发言 麻烦大虾指点一下ASSERT宏有什么用 TOOLBAR怎么弄个图标呢? 非要自己画吗? 为什么“记录集是只读”? 在vc中如何调用xp_cmdshell 奇怪的问题!debug和release! 哪有好点的关于VC socket编程的电子书下载?
1、 bool GetIP1()
{
bool m_bVeri = false; addrinfo hints, *result = NULL;
memset(&hints, 0, sizeof(hints));
hints.ai_flags = AI_PASSIVE;
hints.ai_family = AF_UNSPEC;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
char szhostname[128];
gethostname(szhostname,sizeof(szhostname));
if (getaddrinfo(static_cast<LPCTSTR>(szhostname), 0, &hints, &result) != 0)
return m_bVeri; //if (getnameinfo(result->ai_addr, result->ai_addrlen, m_sIP, 256, NULL, 0, NI_NUMERICHOST) != 0)
// return m_bVeri; m_bVeri = true;
addrinfo* paddr;
paddr=result;
int i=0;
while(paddr!=NULL)
{
char tmp[256];
wsprintf(tmp,"the %d address name:%s,",i,paddr->ai_canonname);
OutputDebugString(tmp);
print_sockaddr(paddr->ai_addr);
paddr=paddr->ai_next;
}
freeaddrinfo(result);
return m_bVeri;
}
2、 假设你有了名为My的对话框工程.有一个按钮并有响应的程序:如OnButton1();
BOOL CListCtrl1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
AfxSocketInit(NULL);//支持Socket.若在向导是没选Support Socket,这就的加.还要加#include <afxsock.h>在StdAfx.h中. .......
// Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range.
// TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control
}
void CListCtrl1Dlg::OnButton1()
{
WORD wVersionRequested;
WSADATA wsaData;
char name[255];
CString ip;
PHOSTENT hostinfo;
wVersionRequested = MAKEWORD( 2, 0 ); if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
{ if( gethostname ( name, sizeof(name)) == 0)
{
if((hostinfo = gethostbyname(name)) != NULL)
{
ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
}
}
WSACleanup( );
}
AfxMessageBox(name);//name里是本机名
AfxMessageBox(ip); //ip中是本机IP
}
3、// TODO: 获得本机的IP地址。子网掩码。广播地址
STDMETHODIMP CSysInfo::GetIPsAddress(BSTR *pIPAddress,BSTR *pSubnetVal,BSTR *pBroadcastAddr,int* pIPsCounter)
{
wchar_t strIPAddress[1000];
::ZeroMemory(&strIPAddress,sizeof(strIPAddress));
wchar_t strSubnetMask[1000];
::ZeroMemory(&strSubnetMask,sizeof(strSubnetMask));
wchar_t strBroadcastAddr[1000];
::ZeroMemory(&strBroadcastAddr,sizeof(strBroadcastAddr)); char cBuffer[10000];
::ZeroMemory(&cBuffer,sizeof(cBuffer));
PMIB_IPADDRTABLE pTable = (PMIB_IPADDRTABLE)cBuffer;
DWORD dwSize = sizeof(cBuffer);
if(GetIpAddrTable(pTable,&dwSize,FALSE) == NO_ERROR)
{
wchar_t strIPItem[100];
*pIPsCounter = pTable->dwNumEntries;
for(int i=0;i< *pIPsCounter;i++)
{
DWORD addr = pTable->table[i].dwAddr;
DWORD subnet = pTable->table[i].dwMask;
DWORD broadcast = pTable->table[i].dwBCastAddr;
// Filter 127.0.0.1
if (addr != 0x0100007f)
{
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(addr & 0xFF),((addr >> 8) & 0xFF),((addr >> 16) & 0xFF),((addr >> 24) & 0xFF));
wcscat(strIPAddress,strIPItem);
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(subnet & 0xFF),((subnet >> 8) & 0xFF),((subnet >> 16) & 0xFF),((subnet >> 24) & 0xFF));
wcscat(strSubnetMask,strIPItem);
::ZeroMemory(&strIPItem,sizeof(strIPItem));
swprintf(strIPItem,L"%d.%d.%d.%d",(broadcast & 0xFF),((broadcast >> 8) & 0xFF),((broadcast >> 16) & 0xFF),((broadcast >> 24) & 0xFF));
wcscat(strBroadcastAddr,strIPItem);
}
}
}
*pIPAddress = SysAllocString(strIPAddress);
*pSubnetVal = SysAllocString(strSubnetMask);
*pBroadcastAddr = SysAllocString(strBroadcastAddr);
return S_OK;
}
system("ipconfig>a.txt")
执行这个语句后会在相应的目录里有一个a.txt其内容如下:
Windows 2000 IP ConfigurationEthernet adapter 本地连接: Connection-specific DNS Suffix . :
IP Address. . . . . . . . . . . . : 10.88.109.237 Subnet Mask . . . . . . . . . . . : 255.255.254.0 Default Gateway . . . . . . . . . : 10.88.108.2
你可以打开它取行ip地址!
见笑啦,我vc不怎么样!不过可以考虑考虑这个方法!
// Get computer name
char szComputerName[128];
DWORD dwLen = 128;
::GetComputerName(szComputerName, &dwLen); // Get local IP
CString csLocalIP = _T("");
HOSTENT *pHostent = gethostbyname(szComputerName);
unsigned char chIP[4];
memcpy(chIP, *(pHostent->h_addr_list), 4);
csLocalIP.Format("%d.%d.%d.%d", chIP[0], chIP[1], chIP[2], chIP[3]);