• LINUX应用编程 – 网络编程篇


    地址转换函数

    1.将字符串的IP地址转换成网络字节序的地址

    • in_addr_t inet_addr(const char *strIP);
    • 若成功,返回32位网络字节序的地址,若出错,则返回INADDR_NONE 不建议使用,因为255.255.255.255这个地址无法被转换
    • int inet_aton(const char *strIP, struct in_addr *addr);
    • 若成功,返回非0,若地址字符串有错,返回0,仅转换IPV4地址
    • int inet_pton(int family, const char *strptr, void *addrptr);
    • 返回:1成功,0-输入不是有效的表达式,-1出错 Family:AF_INET6,AF_INET
    • 2.将网络字节序的地址转换成字符串的IP地址
    • char *inet_ntoa(struct in_addr inaddr);
    • 返回:指向字符串IP的指针。非线程安全,在多线程时避免使用 例:char *ip = inet_ntoa(addr.sin_addr);
    • const char *inet_ntop(int family, const void *addr, char *strIP, size_t len);
    • 参数:family – 地址族,值为AF_INET或AF_INET6 addr – 需要转换的地址 返回:指向字符串IP的指针,失败返回NULL; 例:char ip[64]; inet_ntop(AF_INET, &addr.sin_addr, ip, 64);、
    • 创建套接字

     

    • 1. socket() int socket(int family, int type, int protocol);

     

     

    • 功能描述:创建套接字文件描述字。 参数:family – 协议族(网络层) PF_INET -------- IPV4协议 PF_INET6-------- IPV6协议

     

    • PF_LOCAL-------- UNIX域协议(PF_LOCAL) PF_ROUTE------- 路由套接口 type – 套接字类型 SOCK_STREAM -------- 字节流套接口(TCP及AC_LOCAL时) SOCK_DGRAM --------- 数据报套接口(UDP及AC_LOCAL时) protocol – 取0 返回:成功为非负描述字,失败返回-1 例子:int fd = socket(PF_INET, SOCK_STREAM, 0);
    • 2. connect()
    • int connect(int sock, const struct sockaddr *addr, socklen_t len);

      功能描述:建立从客户端到服务器的连接 返回:成功返回0,失败返回-1

    • 3 recv() int recv(int sock, void *buf, int size, int flag);
    • 功能描述:从sock套接字接收数据。服务器使用其接收客户请求,客户使用它接受服务器的应答。如果没有数据,将阻塞。也可以使用recv接收面向连接的UDP的报文。
    • 参数 sockfd:套接字描述符 buf:指向内存块的指针 size:内存块大小,以字节为单位 flags:一般为0 返回: >0 接收到的字节个数 -1 接收失败(EAGAIN-套接字非阻塞, EINTR表示被信号中断) 0 对方连接已关闭,说明套接字已经不可用,需要重新建立连接
    • 4 send() ssize_t send(int sock, const void *buf, size_t len, int flags);
    • 功能 在TCP连接上发送数据,返回成功传送数据的长度,出错时返回-1。 send会将外发数据复制到OS内核中,也可以使用send发送面向连接的UDP报文。
    • 参数说明: sock:套接字描述符 data:指向要发送数据的指针 data_len:数据长度 flags:一直为0
    • 5 close() int close(int s); 功能 关闭套接字。

    • 参数说明: s – 要关闭的套接字

    • connect程序
       1 #include <unistd.h>
       2 #include <stdio.h>
       3 #include <sys/socket.h>
       4 #include <netinet/in.h>
       5 #include <arpa/inet.h>
       6 #include <pthread.h>
       7 
       8 int main()
       9 {
      10     int sock,size;
      11     uint16_t port = 8000;
      12     const     char *IP = "192.168.7.118";
      13     char buf[1024] = "songlongfei";
      14     struct sockaddr_in addr;
      15     memset(&addr,0,sizeof(addr));
      16     sock = socket(AF_INET,SOCK_STREAM,0);
      17     addr.sin_family = AF_INET;
      18     addr.sin_port = htons(port);
      19     inet_pton(AF_INET,IP,&addr.sin_addr);
      20     if(connect(sock,(struct sockaddr*)&addr,sizeof(addr)) != 0)
      21         printf("Connect failed
      ");
      22     while(1)
      23     {
      24         fgets(buf,sizeof(buf),stdin);
      25         if((size = send(sock,buf,sizeof(buf),0)) < 0)
      26             printf("send failed
      ");
      27         else
      28             printf("Connect succ!
      ");
      29         recv(sock,buf,sizeof(buf),0);
      30         printf("%s
      ",buf);
      31     }
      32     close(sock);
      33 }
  • 相关阅读:
    使用 Redis 实现排行榜功能
    php sprintf函数
    phpcms v9文章页调用点击量方法
    redis 高级配置
    mysql 子查询优化
    mysql 优化
    Centos 7 安装Anaconda3
    磁盘调度算法
    pycharm设置python文件颜色
    C++禁止使用拷贝构造函数和赋值运算符方法
  • 原文地址:https://www.cnblogs.com/be-m/p/4340075.html
Copyright © 2020-2023  润新知