IP

    技术2022-05-11  99

     假设主机不是多宿主机,即最多只有一块网卡和一个动态IP#include <winsock.h>void __fastcall TForm1::Button3Click(TObject *Sender){    WSAData wsaData;     if (WSAStartup(MAKEWORD(1,1),&wsaData)!=0)  //初始化WINSOCK调用    {        MessageBox(NULL,"Wrong WinSock Version","Error",MB_OK);        return;    }

        char HostName[80];    LPHOSTENT lpHostEnt;    struct in_addr addr[2];    for (int i=0; i<2; i++)        memset(&addr[i],0,sizeof(in_addr)); //对in_addr结构清0,以利后面填写

        if (gethostname(HostName, sizeof(HostName)) == SOCKET_ERROR)    { // 得到本主机名         MessageBox(NULL, "Can't getting local host name.","Error", MB_OK);        return;    }

        lpHostEnt = gethostbyname(HostName);//利用得到的主机名去获得主机结构    if (!lpHostEnt)    {        MessageBox(NULL, "Yow! Bad host lookup.","Error", MB_OK);        return;    }

        for (int i=0; lpHostEnt->h_addr_list[i]!=0; i++) //从主机地址表中得到IP地址        memcpy(&addr[i],lpHostEnt->h_addr_list[i],sizeof(in_addr));

        Memo1->Lines->Add(HostName);    Memo1->Lines->Add(inet_ntoa(addr[0]));    Memo1->Lines->Add(inet_ntoa(addr[1]));

        WSACleanup();  //释放WINSOCK调用}


    最新回复(0)