回 帖 发 新 帖 刷新版面

主题:怎么利用gethostname获取本机的名称,并输出其IP地址

怎么利用gethostname获取本机的名称,并输出其IP地址

回复列表 (共5个回复)

沙发

gethostname怎么得到IP地址啊 
里面只有一个输出参数char* name,
请教各位高手 要怎么做?

板凳

struct hostent FAR * lpHostEnt=gethostbyname(sHostName);
    if(lpHostEnt==NULL)
    {
        //产生错误
        sIpAddress=_T("");
        return GetLastError();
    }
    //获取IP
    LPSTR lpAddr=lpHostEnt->h_addr_list[0];

3 楼

#pragma comment(lib,"ws2_32.lib")
#include<STDIO.H>
#include<WINSOCK2.H>
int main()
{
    WSAData wsaData;
    int ret=WSAStartup(WINSOCK_VERSION,&wsaData);
    if(ret!=0){
        printf("%d\n",ret);
        return -1;
    }

    else {
        printf("High:%xUse:%x\n",wsaData.wHighVersion,wsaData.wVersion);
    }
char *name;
int namelen=sizeof(*name);
    if(gethostname(name,namelen)!=0){
        printf("gethostname 失败");
        return -1;
    }
    else {
        HOSTENT *host=gethostbyname(name);
        SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
        struct in_addr addr;
        memset(&addr,0,sizeof(addr));
        if(host !=NULL){
            for(int i=0;host->h_addr_list[i]!=NULL;i++){
            memcpy(&addr.S_un.S_addr,
            host->h_addr_list[i],
            host->h_length);
            }
        }
    printf("%s: %s\n",host->h_name,inet_ntoa(addr));
    }
WSACleanup();
    return 0;
}

这是我写的程序,不知道为什么是gethostname失败

4 楼


#pragma comment(lib,"ws2_32.lib")
#include<STDIO.H>
#include<WINSOCK2.H>
int main()
{
    WSAData wsaData;
    int ret=WSAStartup(WINSOCK_VERSION,&wsaData);
    if(ret!=0){
        printf("%d\n",ret);
        return -1;
    }

    else {
        printf("High:%xUse:%x\n",wsaData.wHighVersion,wsaData.wVersion);
    }
char *name;
int namelen=sizeof(*name);
    if(gethostname(name,namelen)!=0){
        printf("gethostname 失败");
        return -1;
    }
    else {
        HOSTENT *host=gethostbyname(name);
        SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
        struct in_addr addr;
        memset(&addr,0,sizeof(addr));
        if(host !=NULL){
            for(int i=0;host->h_addr_list[i]!=NULL;i++){
            memcpy(&addr.S_un.S_addr,
            host->h_addr_list[i],
            host->h_length);
            }
        }
    printf("%s: %s\n",host->h_name,inet_ntoa(addr));
    }
WSACleanup();
    return 0;
}

这是我写的程序,不知道为什么是gethostname失败

5 楼

char *name;
别的不清楚,不过这个name你没分配内存就在使用,肯定是不行地

呵呵,你发了两个贴!!

我来回复

您尚未登录,请登录后再回复。点此登录或注册