VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 707|回复: 3

inet_pton 函数写 AF_INET 到哪里去了

[复制链接]
85_avatar_middle
最佳答案
3 
在线会员 发表于 2019-4-6 20:18:11 | 显示全部楼层 |阅读模式
3驿站币
inet_pton(
    _In_      INT                Family,
    _In_      PCSTR           pszAddrString,
    _Out_   PVOID           pAddrBuf)
inet_pton(AF_INET, "0.0.0.0", &addr.sin_addr);  
新函数吧"AF_INET"写到哪里去了,半天没找到
&addr.sin_addr改&addr  查了内存 又不对

请教各位大师 inet_pton   有没有吧 AF_INET 写入地址  ?如果有 写到哪里去了?

最佳答案

查看完整内容

仅了解inet_ntop是远远不够地,看这里吧,在里面能找到AF_INET 。这一句 inet_ntop(AF_INET,&sockaddr_ipv4->sin_addr, ip4str,64)




上一篇:学习驱动第一天的问题 蓝屏!谁来救救这个学生
下一篇:学加密用什么
75_avatar_middle
最佳答案
0 
在线会员 发表于 2019-4-6 20:18:12 | 显示全部楼层
本帖最后由 xx_player 于 2019-4-7 21:15 编辑

仅了解inet_ntop是远远不够地,看这里吧,在里面能找到AF_INET 。这一句
inet_ntop(AF_INET,&sockaddr_ipv4->sin_addr, ip4str,64)<<endl;
将地址sockaddr_ipv4->sin_addr的4个字节数转成ip格式串。返回也是串,等于ip4str,64是缓冲区长度。
例程获取的是本机的网卡相关配置信息。注意:本机是你的机器名,不是运行结果中的DESKTOP-C4G58AO,
那是我这里的,不要搞错了。在我机器上运行是这样,在你那里运行就不是了。
#include "stdafx.h"
#include<iostream>
#include<iomanip>
#include<WS2tcpip.h>
#pragma comment(lib,"Ws2_32.lib")
using namespace std;
BOOL SetConsoleColor(WORD wAttributes)
{
        HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
        if (hConsole == INVALID_HANDLE_VALUE)               
                return FALSE;        
        return SetConsoleTextAttribute(hConsole, wAttributes);
}
int main()
{
        WSADATA wsaData;
        int ret = WSAStartup(MAKEWORD(2, 2), &wsaData);
        addrinfo hints;
        ZeroMemory(&hints, sizeof(hints));
        hints.ai_family   = AF_UNSPEC;
        hints.ai_socktype = SOCK_STREAM;
        hints.ai_protocol = IPPROTO_TCP;
        addrinfo*result;
        CHAR  ip4str[46];
        TCHAR ipv6str[46];
        DWORD ipv6strlength = 46;
        struct sockaddr_in  *sockaddr_ipv4;
        LPSOCKADDR sockaddr_ip;
        char hostname[64];
        gethostname(hostname, 64);
        ret = getaddrinfo(hostname, NULL, &hints, &result);
        int count = 0;
        SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        cout << "本机 ";
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
        cout << hostname;
        SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        cout<<" 网络信息:" << endl;
        cout << "====================================================================" << endl;
        for(addrinfo*ptr = result; ptr != NULL; ptr = ptr->ai_next) {
                    ++count;
                        SetConsoleColor(FOREGROUND_RED| FOREGROUND_GREEN | FOREGROUND_INTENSITY);
                    cout << "第"<<count<<"条信息"<<endl;
                        SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY);
                        cout<<setw(16)<<"网络家族: ";
                        SetConsoleColor(FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY);
                        switch (ptr->ai_family) {
                        case AF_UNSPEC:            cout << "Unspecified"<<endl;break;
                        case AF_INET:            cout << "AF_INET (IPv4)";
                                                            sockaddr_ipv4 = (struct sockaddr_in *) ptr->ai_addr;
                                                            cout << "\tIPv4 地址 "<<        inet_ntop(AF_INET,&sockaddr_ipv4->sin_addr, ip4str,64)<<endl;
                                                            break;
                        case AF_INET6:      cout << "AF_INET6 (IPv6)";
                                                            sockaddr_ip = (LPSOCKADDR)ptr->ai_addr;
                                                            ipv6strlength = 46;
                                                            ret = WSAAddressToString(sockaddr_ip, (DWORD)ptr->ai_addrlen, NULL, ipv6str, &ipv6strlength);
                                                            if (ret)  cout<<"WSAAddressToString 失败!错误码= "<<WSAGetLastError()<<endl;
                                                            else           wcout << "\tIPv6 地址 "<< ipv6str << endl;
                                                            break;
                        case AF_NETBIOS:    cout << "AF_NETBIOS (NetBIOS)" << endl;        break;
                        default:            cout << "Other "<<ptr->ai_family << endl;break;
                        }
                        SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN );
                        cout << setw(16) << "套接字类型: ";
                        SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_BLUE|FOREGROUND_INTENSITY);
                        switch (ptr->ai_socktype) {
                        case 0:             cout << "Unspecified" << endl;;        break;
                        case SOCK_STREAM:   cout << "SOCK_STREAM (stream)" << endl;        break;
                        case SOCK_DGRAM:    cout << "SOCK_DGRAM (datagram)" << endl;break;
                        case SOCK_RAW:      cout << "SOCK_RAW (raw) " << endl;break;
                        case SOCK_RDM:      cout << "SOCK_RDM (reliable message datagram)" << endl;        break;
                        case SOCK_SEQPACKET:cout << "SOCK_SEQPACKET (pseudo-stream packet)" << endl;break;
                        default:            cout <<"Other " <<  ptr->ai_socktype << endl;break;
                        }
                        SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN );
                        cout << setw(16) << "网络协议: ";
                        SetConsoleColor(FOREGROUND_GREEN );
                        switch (ptr->ai_protocol) {
                        case 0:             cout << "Unspecified" << endl;break;
                        case IPPROTO_TCP:   cout << "IPPROTO_TCP (TCP)" << endl;break;
                        case IPPROTO_UDP:   cout << "IPPROTO_UDP (UDP)" << endl;break;
                        default:            cout << "Other " << ptr->ai_protocol << endl;break;
                        }
        }
        SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_INTENSITY);
        cout << "====================================================================" << endl;
        freeaddrinfo(result);
        WSACleanup();
        SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
        system("pause");
    return 0;
}
运行结果:
inet_pton 函数写 AF_INET 到哪里去了

inet_pton 函数写 AF_INET 到哪里去了

87_avatar_middle
最佳答案
12 
在线会员 发表于 2019-4-7 09:17:52 | 显示全部楼层
inet_pton 函数写 AF_INET 到哪里去了
85_avatar_middle
最佳答案
3 
ico_lz  楼主| 发表于 2019-4-8 21:45:11 | 显示全部楼层
xx_player 发表于 2019-4-7 21:10
仅了解inet_ntop是远远不够地,看这里吧,在里面能找到AF_INET 。这一句
inet_ntop(AF_INET,&sockaddr_ipv ...

感谢 你 太热情了   我在内存中查看了  inet_pton  只 把 参数二 "0.0.0.0"  写入 参数三的 位置   参数一没有写入.
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

×【发帖 友情提示】
1、请回复有意义的内容,请勿恶意灌水;
2、纯数字、字母、表情等无意义的内容系统将自动删除;
3、若正常回复后帖子被自动删除,为系统误删的情况,请重新回复其他正常内容或等待管理员审核通过后会自动发布;
4、感谢您对VC驿站一如既往的支持,谢谢合作!

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号 )|网站地图wx_jqr

GMT+8, 2020-12-5 10:27

Powered by CcTry.CoM

© 2009-2020 cctry.com

快速回复 返回顶部 返回列表