VC++如何获取本机的IP地址

VC++如何获取本机的IP地址,第1张

获取本机ip实现过程:

WSAStartup()。Windows Sockets Asynchronous的启动命令,Windows下的网络编程必须先启用本命令,不然,后续的 *** 作都会报错:10093:WSAStartup() 调用未成功执行过。

gethostname()获得本机名

gethostbyname()获得本机网络信息,存储到struct hostent 指针中,返回给调用者

从struct hostent结构体信息中,获取ip地址,转换成字符串输出

参考代码 :

#include "winsock2h"

#pragma comment(lib,"ws2_32lib")

int main(int argc, char argv[])

{

WSADATA wsaData;

char name[155];

char ip;

PHOSTENT hostinfo;

if ( WSAStartup( MAKEWORD(2,0), &wsaData ) == 0 )

{

if( gethostname ( name, sizeof(name)) == 0)

{

printf("hostname=%s\n", name );

if((hostinfo = gethostbyname(name)) != NULL)

{

ip = inet_ntoa ((struct in_addr )hostinfo->h_addr_list); //得到地址字符串

printf("local host ip: %s\n",ip);

}

}

WSACleanup( );

}

return 0;

}

CIPAddressCtrl 获取地址的函数是

int CIPAddressCtrl::GetAddress(BYTE& nField0, BYTE& nField1, BYTE& nField2, BYTE& nField3)

{

ASSERT(::IsWindow(m_hWnd));

DWORD dwAddress;

LRESULT nRetVal = ::SendMessage(m_hWnd, IPM_GETADDRESS, 0, (LPARAM) &dwAddress);

nField0 = (BYTE) FIRST_IPADDRESS(dwAddress);

nField1 = (BYTE) SECOND_IPADDRESS(dwAddress);

nField2 = (BYTE) THIRD_IPADDRESS(dwAddress);

nField3 = (BYTE) FOURTH_IPADDRESS(dwAddress);

return nRetVal;

}

对话框关了,m_IpAddress窗口就销毁了,再去获取,就会

触发ASSERT(::IsWindow(m_hWnd));断言。

建议:将地址变量在dialog中单独存储,再获取就不会出错了。

可以使用这个实现。

BOOL GetSockName(

CString& rSocketAddress,

UINT& rSocketPort

);

可以使用 inet_addr得到IP地址字符串对应的int。

另一个实现中的数据结构:

struct sockaddr {

ushort sa_family;

char sa_data[14];

};

实际上等同于如下架构,可以强制转换使用的。

struct sockaddr_in {

short sin_family;

u_short sin_port;

struct in_addr sin_addr;

char sin_zero[8];

};

其中sin_addr是一个union

typedef struct in_addr {

union {

struct { UCHAR s_b1,s_b2,s_b3,s_b4; } S_un_b;

struct { USHORT s_w1,s_w2; } S_un_w;

ULONG S_addr;

} S_un;

} IN_ADDR, PIN_ADDR, FAR LPIN_ADDR;

我们一般用S_addr,这个就是IP地址,可以使用inet_ntoa得到对应字符串

我在原来的问题里也回答你了,记得采纳哦

ysdoc的回答不对的,因为GetSockName的值是输出,不是输入,所以不需要用recvfrom去获取。

因为Client是通信的主动方,即发起通信的一端,因此通信之前Client必须已知Server的IP和端口号才行。

通常的C/S模式通信的做法是先为Server申请公网IP,然后在client编程时指明欲连接的Server的IP和端口号,这样的client程序一旦安装后就内置了Server的IP;

另一种做法是在client的执行界面预留输入框,执行时允许用户输入Server的IP,然后实现通信,这两种方式都必须事先知道server的IP信息才行。

以上就是关于VC++如何获取本机的IP地址全部的内容,包括:VC++如何获取本机的IP地址、MFC中IP地址控件问题、MFC网络编程,想通过GetSockName函数获取某个客户端的IP地址,不知道参数怎么用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/10058994.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存