• Linux 套接字socket与地址查询


    先介绍一下如何获取主机名和服务名吧!

    用hostname命令可以获取主机名

    那如何获取服务名呢?

    通过这个命令systemctl list-unit-files 可以获取系统服务

    来了解一个服务,nfs服务。

    NFS (Network File System) 即网络文件系统。一种使用于分散式文件系统的协定,功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。

    有时候我们需要直接获取一个地址结构。用什么办法呢?

    用getaddrinfo 函数

    #include<sys/socket.h>

    #include<netdb.h>

    int getaddrinfo(const char* host,const char* service,const struct addrinfo *hint,struct addrinfo **res);

    void freeaddrinfo(struct addrinfo *ai);

    提供一个主机名和服务名 给第一参数 第二参数

    第三参数是一个 addrinfo 结构的指针。这个结构名暂且叫hint,它起到过滤作用。

    第四参数是一个 指向addrinfo指针的 指针。是一个链表结构,一个存储addrinfo指针的链表

    那一个addrinfo 结构有蕴含什么信息?

    int ai_flags  //指定了这个addrinfo的行为

    (AI_CANONNAME 需要一个规范名字

     AI_ALL 寻找IPV4 IPV6地址

     AI_ADDRCONFIG 查询配置的地址类型

    ...etc)

    int ai_family //地址族

    int ai_socktype //套接字类型

    int ai_protocol //协议类型

    socklen_t ai_addrlen //地址长度

    struck sockaddr *ai_addr //地址结构

    char *ai_canonname //

    struct addrinfo *ai_next

    ...etc

    还有一个函数与之相反是通过一个地址获得主机名和服务名

    #include<sys/socket.h>

    #include<netdb.h>

     int getnameinfo(const struct sockaddr *addr,socklen_t alen,

     char* host,socklen_t hostlen,

     char* service,socklen_t servlen,int flags);

    还有一些其他的类似结构体

    hostent 主机信息的

    netent 网络信息的

    protoent 协议信息的

    servent 服务信息的

  • 相关阅读:
    【今日CS 视觉论文速览】Mon, 7 Jan 2019
    文章汇总页面
    【MarkDown】转义字符
    hdu 4678 Mine 博弈论
    hdu 4294 Multiple
    hdu 4291 A Short problem
    hdu 4672 Present Day, Present Time 博弈论
    hdu 3544 Alice's Game 博弈论
    hdu 3389 Game 博弈论
    hdu 2147 kiki's game 博弈论
  • 原文地址:https://www.cnblogs.com/zzzPark/p/6400567.html
Copyright © 2020-2023  润新知