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 }
原文地址:https://www.cnblogs.com/be-m/p/4340075.html