回 帖 发 新 帖 刷新版面

主题:利用gethostname获取本机的名称,并输出其IP地址的程序错在哪里??

利用gethostname获取本机的名称,并输出其IP地址
#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失败

回复列表 (共3个回复)

沙发

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

板凳

#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[100];
    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();

    system("pause");
    return 0;
}

3 楼


呵呵   谢谢你了

我来回复

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