欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

UNIX网络编程卷一:3 套接字编程简介

程序员文章站 2022-03-02 13:57:49
...
1、套接字地址结构
    ipv4套接字地址结构
    <netinet/in.h>
    struct in_addr
    struct sockaddr_in
 
 
2、通用套接字地址结构
    <sys/socket.h>
    struct sockaddr
 
3、值-结果参数
    从进程到内核传递套接字地址结构的函数有3个:bind、connect、sendto
    从内核到进程传递套接字地址结构的函数有4个:accept、recvfrom、getsockname、getpeername
 
 
4、字节序排序函数
    一个16位整数,它由2个字节组成,内存中存储这二个字节有二种方法:一种是将低序字节存储在起始地址,这称为小端字节序
    另一种方法是将高序字节存储在起始地址,这称为大端字节序。
    
       #include <arpa/inet.h>
 
       uint32_t htonl(uint32_t hostlong);
 
       uint16_t htons(uint16_t hostshort);
 
       uint32_t ntohl(uint32_t netlong);
 
       uint16_t ntohs(uint16_t netshort);
 
5、字节操纵函数
    名字以b开头的一组函数起源于BSD
    bzero
    bcopy
    bcmp
 
    ANSI C函数
    memset
    memcpy
    memcmp
 
6、inet_aton  inet_addr  inet_ntoa
    下列函数在点分十进制数串(101.168.112.96)与它长度为13位的网络字节序二进制间转换IPV4地址
 
       #include <sys/socket.h>
       #include <netinet/in.h>
       #include <arpa/inet.h>
 
       int inet_aton(const char *cp, struct in_addr *inp);
 
       in_addr_t inet_addr(const char *cp);
 
       in_addr_t inet_network(const char *cp);
 
       char *inet_ntoa(struct in_addr in);
 
       struct in_addr inet_makeaddr(int net, int host);
 
       in_addr_t inet_lnaof(struct in_addr in);
 
       in_addr_t inet_netof(struct in_addr in);
inet_aton将cp所指的字符串转换成一个32位的网络字节序二进制值。
inet_ntoa 函数将一个32位的网络字节序二进制ipv4地址转换成相应的点分十进制数串。
 

7、inet_pton   inet_ntop
       #include <arpa/inet.h>
 
       int inet_pton(int af, const char *src, void *dst);
       const char *inet_ntop(int af, const void *src,
                             char *dst, socklen_t size);
 
8、readn writen readline
    字节流套接字上的read和write函数所表现的行为不同于通常的文件IO。字节流套接字上调用read或write输入或输出的字节数可能比请求的数量少,然而这不是出错的状态。这个现象的原因在于内核中用于套接字的缓冲区可能已达到了极限。此时所需的是调用者再次调用read或write函数,以输入或输出剩余字节。