===如何获取本机的IP地址=== 如题? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 // 本程序报告本机上每一块网卡的IP地址// 命令行编译命令为://// cl getip1.cpp wsock32.lib//// 请一定要在环境变量中正确指定LIB库的路径;可以运行vcvars32.bat//#include <winsock.h>#include <wsipx.h>#include <wsnwlink.h>#include <stdio.h>int main(){ //////////////// // 初始化 Windows sockets API. 要求版本为 version 1.1 // WORD wVersionRequested = MAKEWORD(1, 1); WSADATA wsaData; if (WSAStartup(wVersionRequested, &wsaData)) { printf("WSAStartup failed %s\n", WSAGetLastError()); return -1; } ////////////////// // 获得主机名. // char hostname[256]; int res = gethostname(hostname, sizeof(hostname)); if (res != 0) { printf("Error: %u\n", WSAGetLastError()); return -1; } printf("hostname=%s\n", hostname); //////////////// // 根据主机名获取主机信息. // hostent* pHostent = gethostbyname(hostname); if (pHostent==NULL) { printf("Error: %u\n", WSAGetLastError()); return -1; } ////////////////// // 解析返回的hostent信息. // hostent& he = *pHostent; printf("name=%s\naliases=%s\naddrtype=%d\nlength=%d\n", he.h_name, he.h_aliases, he.h_addrtype, he.h_length); sockaddr_in sa; for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) { memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length); // 输出机器的IP地址. printf("Address: %s\n", inet_ntoa(sa.sin_addr)); // 显示地址串 } ////////////////// // 终止 Windows sockets API // WSACleanup(); return 0;} CString LocalHostAddress(){ char hostname[128]; char Address[20]; if (gethostname(hostname, sizeof(hostname)) != SOCKET_ERROR) { XTApp->Host_Name=hostname; HOSTENT *Hostent; Hostent = gethostbyname(hostname); if (Hostent != NULL) { int j; int i =0; memset(Address, 0, sizeof(Address)); for (j=0; j<4; j++) { sprintf(Address, "%s%d.",Address, (unsigned int)((unsigned char*)Hostent->h_addr_list[i])[j]); } } } CString Ips = Address; CString Re = Ips.Left(strlen(Ips)-1); return Re;} 没那样复杂吧char *GetLocalIP(){ struct in_addr localaddr; struct hostent *hp=NULL; char hostname[50]; gethostname(hostname,49);//主机名 hp=gethostbyname(hostname);主机信息 memcpy(&localaddr,hp->h_addr,hp->length);//地址 return inet_ntoa(localaddr);//变成char *} 照 dawndu(东南飞)那样做就可以了。 //获取本机IP地址void CAviTestDlg::GetIP(char* IP){ struct in_addr localaddr; struct hostent *hp=NULL; char hostname[50]; gethostname(hostname,49);//主机名AfxMessageBox(hostname);//----此处是空白信息 hp=gethostbyname(hostname);//主机信息AfxMessageBox("1"); //--此处显示, memcpy(&localaddr,hp->h_addr,hp->h_length);//地址--到这里就死了AfxMessageBox("2"); IP=inet_ntoa(localaddr);//变成char *AfxMessageBox("3");} OpenGL焦点拾取问题 双三次内插的的一点误差,求分析~ Vc创建窗口错误 error LNK2001: unresolved external symbol _main CMFCPropertyGridCtrl 使用遇到 Memory Leak MFC对话框编程按钮导致程序死掉了 如何计算两个计算机之间或单个网络结点的网络流量? 请教切分窗口的问题 如何显示gif动画?小弟现在分不多,以后再加。 利率 问题 怎样显示文本?? 版主:为什么我总不能搜索? 组合框的使用问题,简单,在线等!!!
// 命令行编译命令为:
//
// cl getip1.cpp wsock32.lib
//
// 请一定要在环境变量中正确指定LIB库的路径;可以运行vcvars32.bat
//
#include <winsock.h>
#include <wsipx.h>
#include <wsnwlink.h>
#include <stdio.h>int main()
{
////////////////
// 初始化 Windows sockets API. 要求版本为 version 1.1
//
WORD wVersionRequested = MAKEWORD(1, 1);
WSADATA wsaData;
if (WSAStartup(wVersionRequested, &wsaData)) {
printf("WSAStartup failed %s\n", WSAGetLastError());
return -1;
} //////////////////
// 获得主机名.
//
char hostname[256];
int res = gethostname(hostname, sizeof(hostname));
if (res != 0) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
printf("hostname=%s\n", hostname);
////////////////
// 根据主机名获取主机信息.
//
hostent* pHostent = gethostbyname(hostname);
if (pHostent==NULL) {
printf("Error: %u\n", WSAGetLastError());
return -1;
}
//////////////////
// 解析返回的hostent信息.
//
hostent& he = *pHostent;
printf("name=%s\naliases=%s\naddrtype=%d\nlength=%d\n",
he.h_name, he.h_aliases, he.h_addrtype, he.h_length);
sockaddr_in sa;
for (int nAdapter=0; he.h_addr_list[nAdapter]; nAdapter++) {
memcpy ( &sa.sin_addr.s_addr, he.h_addr_list[nAdapter],he.h_length);
// 输出机器的IP地址.
printf("Address: %s\n", inet_ntoa(sa.sin_addr)); // 显示地址串
}
//////////////////
// 终止 Windows sockets API
//
WSACleanup();
return 0;
}
{
char hostname[128];
char Address[20];
if (gethostname(hostname, sizeof(hostname)) != SOCKET_ERROR)
{
XTApp->Host_Name=hostname;
HOSTENT *Hostent;
Hostent = gethostbyname(hostname);
if (Hostent != NULL)
{
int j;
int i =0;
memset(Address, 0, sizeof(Address));
for (j=0; j<4; j++)
{
sprintf(Address, "%s%d.",Address, (unsigned int)((unsigned char*)Hostent->h_addr_list[i])[j]);
}
}
}
CString Ips = Address;
CString Re = Ips.Left(strlen(Ips)-1);
return Re;
}
{
struct in_addr localaddr;
struct hostent *hp=NULL;
char hostname[50];
gethostname(hostname,49);//主机名
hp=gethostbyname(hostname);主机信息
memcpy(&localaddr,hp->h_addr,hp->length);//地址
return inet_ntoa(localaddr);//变成char *}
void CAviTestDlg::GetIP(char* IP)
{
struct in_addr localaddr;
struct hostent *hp=NULL;
char hostname[50];
gethostname(hostname,49);//主机名
AfxMessageBox(hostname);//----此处是空白信息
hp=gethostbyname(hostname);//主机信息
AfxMessageBox("1"); //--此处显示,
memcpy(&localaddr,hp->h_addr,hp->h_length);//地址--到这里就死了
AfxMessageBox("2");
IP=inet_ntoa(localaddr);//变成char *
AfxMessageBox("3");
}