zoukankan      html  css  js  c++  java
  • Linux网络编程III

    1.UDP通信
    #include <sys/types.h>
    #include <sys/socket.h>
    ssize_t sendto(int sockfd, const void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
        - sockfd: 通信的fd
        - buf: 要发送的数据
        - len: 要发送的数据长度
        - flags: 0
        - dest_addr: 通信的另外一端地址信息
        - addrlen: 地址的内存大小
     
    ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags, const struct sockaddr *dest_addr, socklen_t addrlen);
        - sockfd: 通信的fd
        - buf: 接收数据的数组,传出参数
        - len: 数组大小
        - flags: 0
        - dest_addr: 通信的另外一端地址信息,不需要可以指定为NULL
        - addrlen: 地址的内存大小
    

      

     
    2.广播
    • 向子网中多台计算机发送消息,并且子网中所有的计算机都可以接收到发送方发送的消息,每个广播消息都包含一个特殊的IP地址,主机号部分的二进制全部为1。
    • 只能在局域网中使用。
    • 客户端需要绑定服务器广播使用的端口,才可以接收到广播消息。
    // 设置广播属性的函数
    int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
        - sockfd : 文件描述符
        - level : SOL_SOCKET
        - optname : SO_BROADCAST
        - optval : int类型的值,为1表示允许广播
        - optlen : optval的大小
    

     

    3.多播
    • 既可以用于局域网,也可以用于广域网
    • 客户端需要加入多播组,才能接受到多播的数据
    /
    / 服务器设置多播的信息,外出接口
    int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
        - level: IPPROTO_IP
        - optname: IP_MULTICAST_IF
        - optval: struct in_addr    
     
    // 客户端加入多播地址
    int setsockopt(int sockfd, int level, int optname,const void *optval, socklen_t optlen);
        - level: IPPROTO_IP
        - optname: IP_ADD_MEMBERSHIP
        - optval: struct ip_mreq
     
    struct ip_mreq {
        struct in_addr imr_multiaddr;        // 组播的IP地址
        struct in_addr imr_interface;        // 本地的IP地址
    };
     
    typedef uint32_t in_addr_t;
     
    struct in_addr {
        in_addr_t s_addr;
    };
    

      

    4.本地套接字:本地的进程间通信。
    • 有关系的进程间通信
    • 无关系的进程间通信
    • 本地套接字实现与网络套接字实现类似,一般使用TCP协议
    • 过程:
      • 服务器端:
        • 创建监听的套接字  AF_UNIX / AF_LOCAL
        • 监听的套接字绑定本地的套接字文件  struct sockaddr_un addr;  绑定成功后指定的 sun_path 中的套接字文件会自动生成   bind(fdl, addr, len);
        • 监听  listen(fdl, 100);
        • 等待连接并接受请求  int fdc = accept(fdl, &cliaddr, len);
        • 通信 read/write
        • 关闭连接 close()
      • 客户端:
        • 创建通信的套接字
        • 监听的套接字绑定本地的IP端口
        • 连接服务器   connect(fd, &serveraddr, sizeof(serveraddr));
        • 通信 read/write
        • 关闭连接 close()
    #include <sys/un.h>
    #define UNIX_PATH_MAX 108
    struct sockaddr_un {
    sa_family_t sun_family; // 地址族协议 af_local
    char sun_path[UNIX_PATH_MAX]; // 套接字文件的路径, 这是一个伪文件, 大小永远=0
    };
     
    strcpy(addr.sun_path, "server.sock");
    

      

     
  • 相关阅读:
    UEFI启动 安装win8 win10 及windows server 2012 最简单的方法
    Android SDK中国在线更新镜像服务器 解决GOOGLE更新无法下载 更新失败的问题
    DELPHI 单元文件结构
    获取程序自身大小的2个函数
    实时获取网络时间 并转换为北京时间的函数
    部署maven的一些要点、遇到的问题
    cron表达式详解
    redhat安装xwindow环境
    tomcat执行文件权限
    一个方便的java分页算法
  • 原文地址:https://www.cnblogs.com/tristatl/p/15120703.html
Copyright © 2011-2022 走看看