zoukankan      html  css  js  c++  java
  • sock编程

    1.port 1-65535(0保留)

    2.UDP发送消息最大(65507字节)

    3.ipv4

    struct sockaddr//netinet/in.h
    {
        sa_family_t sa_family;
        char sa_data[14];
    };
    struct in_addr
    {
        uint32_t s_addr;
    };
    struct sockaddr_in
    {
        sa_family_t sin_family;
        in_port_t sin_port;
        struct in_addr sin_addr;
        char sin_zero[8];
    };

    sockaddr_in只是sockaddr结构中数据详细视图,在用到sockaddr的地方都将sockaddr_in 转为sockaddr

    4.inet_pton(AF_INET,const char* ip,void *dst)//arpa/inet.h

    将ip地址(字符串)转为指定二进制(AF_INET),保持在第三个参数中,失败返回0(无效ip地址)/负数(错误)

    5.sockaddr_in.sin_port= htons(int port) //netinet/in.h

    将端口(整数)转为网络字节

    6.ssize_t send(socket,void* msg,size_t msgLen,int flag)//sys/socket.h

    默认行为阻塞到发送所有数据为止,flag=0为默认行为,失败返回-1

    7.ssize_t recv(socket,void* buf,size_t bufLen,int flag) //sys/socket.h

    recv默认阻塞到至少传输一些字符(一般为一个字符),flag= 0为默认行为,失败返回-1,返回值为0指示另一端关闭tcp链接,bufLen应加1为null做预留空间

    8.int getaddrinfo(const char *hoststr,const char* servicestr,const struct addrinfo* hints,struct addrinfo **result) //netdb.h

    可进行域名解析,且不需要将ip或者port转为网络字节(需要转换的整形变量),成功返回0,失败返回非0;可用来将ip或者port转为网络字节(addrinfo.ai_addr)

    可用来获取本机ip,将addrinfo.ai_flag= AI_PASSIVE

    9.send/sendto 区别

    send()调用返回时,只知道数据已经复制进缓冲区中进行传输,数据还可能会或者不会实际地进行传输(缓冲区为重传做准备)

    sendto()调用返回时,就已经把消息传递给底层信道以进行传输

    10.recvfrom()

    假设接收n个字节,而消息为m个字节,当n<m时,剩余的字节将被悄悄地抛弃,而不会向接收程序指示

    recvfrom()标志位设MSG_PEEK可预读第一个数据块

    11.字节排序

    大端:从高位开始传递;小端:从低位开始传递;

    网络字节:大端字节顺序;

    主机字节排序可能是大端也可能是小端,两主机之间应协调好

    12.setsockopt()

    设置缓冲区的大小即使成功也不一定设置成功,它只是提示系统,用户所期望的值

    13.

    多个进程拥有同一个socket句柄,若其中一个close,其他不做任何操作则socket并不会关闭(可能是引用计数)

    进程:复制父进程全部状态(内存,栈,文件/套接字描述符等)

    线程:共享与父进程相同的地址空间(代码/数据)

  • 相关阅读:
    twitter分享问题(三)——Required oauth_verifier parameter not provided
    旋转数组的最小数字
    关系型数据库基础之:简单的数据查询
    twitter分享问题(一)——MISSING_ARG_APIKEY
    extern "C"的理解
    从一个链接错误探究GCC的链接库顺序
    GAE 博客——B3log Solo 0.4.0 正式版发布了!
    不使用资源文件动态创建对话框的做法
    GAE 博客——B3log Solo 0.4.0 正式版发布了!
    CodeBlocks启动多个进程实例的做法
  • 原文地址:https://www.cnblogs.com/Call-C/p/7137097.html
Copyright © 2011-2022 走看看