Linux 之 网络编程基础

来源:互联网 发布:optical flow算法介绍 编辑:程序博客网 时间:2024/06/03 16:41

网络编程基础API

socket地址API创建socket监听socket接收连接发起连接关闭连接数据读写

socket地址API

主机字节和网络字节转换API:    #include <netinet/in.h>    //主机字节转换成网络字节    unsigned short int htons(unsigned short int hostshrot);        //网络字节转换成主机字节    unsigned short int ntohs(unsigned short int netshrot);专用socket地址结构体:    //TCP/IP协议族专用socket地址结构体    struct sockaddr_in    {        sa_family_t sin_family; //地址族:AF_INET        u_int16_t       sin_port; //端口号, 要用网络字节序表示        struct  in_addr sin_addr;   //IPv4地址结构体,是u_int32_t  s_addr;    };IP转换函数:    #include <arpa/inet.h>    //将字符串IP转换为整数IP    int inet_pton(int af, const char* src,void* dst);        //将整数IP转换成字符串IP    const char* inet_ntop(int af, const void* dst,socklen_t cnt);   

创建socket

创建socket:    #include <sys/types>    #incliude <sys/socket.h>    /*        domain:底层协议族类型        type: 指定服务类型        protocol :具体的协议    */    int socket(int domain, int type, int protocol);命令socket:    #include <sys/types>    #include <sys/socket.h>    // 服务器绑定网络地址    int bind(int sockfd, const struct sockeaddr* addr,socketlen_t addrlen);bind函数成功返回0,否则为-1,常见errno类型:    EACCES:被绑定的地址受到保护。    EADDRINUSE:被绑定的地址正在使用中。

监听socket

监听socket:#include <sys/socket.h>int listen(int sockfd,int backlog);  

接收连接

接收连接API:    #include <sys/types.h>    #include <sys/socket.h>    int accept(int sockfd,struct sockaddr* addr,socklen_t* addrlen);

发起连接

发起连接API:    #include <sys/types.h>    #include <sys/socket.h>    int connect(int sockfd,const struct sockaddr* serv_addr,socklen_t addrlen);connect函数成功返回0,否则为-1,常见errno类型:    ECONNEFUSED:目标端口不存在    ETIMEOUT:连接超时

关闭连接

关闭连接API:    #include <unistd.h>    #include <sys/socket.h>    int close(int fd);    int shutdown(int sockfd,int howto);shutdown函数中howto参数选项    SHUT_RE:关闭读这一半    SHUT_WR:关闭写着一半    SHUT_RDWR:同时关闭读和写

数据读写

TCP数据读写API:    #include <sys/types.h>    #include <sys/socket.h>    ssize_t recv(int sockfd,void* buf,size_t len,int flags);    ssize_t send(int sockfd,cons void* buf,size_t len,int flags);recv函数和send函数的flags参数选项    MSG_WAITALL:读操作读取到一定数量字节后返回    MSG_PEEK:查看读缓冲中的数据而不取出UDP数据读写API:    #include <sys/types.h>    #include <sys/socket.h>    ssize_t recvfrom(int sockfd,void* buf,size_t len,int flags,struct sockaddr* src_addr,socklen_t* addrlen);    ssize_t sendto(int sockfd,cons void* buf,size_t len,int flags,const struct sockaddr* dest_addr,sockelen_t addrlen);

TCP服务端/客户端开发过程

TCP连接通信流程

这里写图片描述

UDP服务端/客户端开发过程

这里写图片描述

(未完待续……持续更新……)

0 0
原创粉丝点击